Changeset 97 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm
- Timestamp:
- Jan 30, 2011, 6:43:08 PM (13 years ago)
- google:author:
- aitotat
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm
r90 r97 15 15 ; All except segments 16 16 ;-------------------------------------------------------------------- 17 ALIGN JUMP_ALIGN18 17 Interrupts_InitializeInterruptVectors: 19 call Interrupts_InitializeInt13hAnd40h 20 call Interrupts_InitializeInt19h 21 jmp SHORT Interrupts_InitializeHardwareIrqHandlers 22 ; Maybe all this should be inlined? 23 24 25 ;-------------------------------------------------------------------- 26 ; Interrupts_Int13hAnd40h 18 ; Fall to .InitializeInt13hAnd40h 19 20 ;-------------------------------------------------------------------- 21 ; .InitializeInt13hAnd40h 27 22 ; Parameters: 28 23 ; DS: RAMVARS segment … … 33 28 ; AX, BX, CX, DX, SI, DI 34 29 ;-------------------------------------------------------------------- 35 ALIGN JUMP_ALIGN 36 Interrupts_InitializeInt13hAnd40h: 30 .InitializeInt13hAnd40h: 37 31 mov ax, [es:INTV_DISK_FUNC*4] ; Load old INT 13h offset 38 32 mov dx, [es:INTV_DISK_FUNC*4+2] ; Load old INT 13h segment … … 47 41 ; 40h from 13h. That system locks to infinite loop if we copy 13h to 40h. 48 42 call FloppyDrive_IsInt40hInstalled 49 jc SHORT .Return 50 mov [es:INTV_FLOPPY_FUNC*4], ax ; Store offset 51 mov [es:INTV_FLOPPY_FUNC*4+2], dx ; Store segment 52 .Return: 53 ret 54 55 56 ;-------------------------------------------------------------------- 57 ; Interrupts_InitializeInt19h 43 jc SHORT .InitializeInt19h 44 mov [es:INTV_FLOPPY_FUNC*4], ax ; Store old INT 13h offset 45 mov [es:INTV_FLOPPY_FUNC*4+2], dx ; Store old INT 13h segment 46 ; Fall to .InitializeInt19h 47 48 ;-------------------------------------------------------------------- 49 ; .InitializeInt19h 58 50 ; Parameters: 59 51 ; DS: RAMVARS segment … … 64 56 ; BX, SI 65 57 ;-------------------------------------------------------------------- 66 ALIGN JUMP_ALIGN 67 Interrupts_InitializeInt19h: 58 .InitializeInt19h: 68 59 mov bx, INTV_BOOTSTRAP 69 60 mov si, Int19hMenu_BootLoader 70 jmpInterrupts_InstallHandlerToVectorInBXFromCSSI71 72 73 ;-------------------------------------------------------------------- 74 ; Interrupts_InitializeHardwareIrqHandlers61 call Interrupts_InstallHandlerToVectorInBXFromCSSI 62 ; Fall to .InitializeHardwareIrqHandlers 63 64 ;-------------------------------------------------------------------- 65 ; .InitializeHardwareIrqHandlers 75 66 ; Parameters: 76 67 ; ES: BDA and Interrupt Vector segment (zero) … … 80 71 ; BX, CX, DX, SI, DI 81 72 ;-------------------------------------------------------------------- 82 ALIGN JUMP_ALIGN 83 Interrupts_InitializeHardwareIrqHandlers: 73 .InitializeHardwareIrqHandlers: 84 74 call RamVars_GetIdeControllerCountToCX 85 75 mov di, ROMVARS.ideVars0 ; CS:SI points to first IDEVARS 86 ALIGN JUMP_ALIGN87 76 .IdeControllerLoop: 88 77 eMOVZX bx, BYTE [cs:di+IDEVARS.bIRQ] … … 103 92 ; BX, SI 104 93 ;-------------------------------------------------------------------- 105 ALIGN JUMP_ALIGN106 94 .InstallLowOrHighIrqHandler: 107 95 test bl, bl … … 121 109 ; BX, SI 122 110 ;-------------------------------------------------------------------- 123 ;ALIGN JUMP_ALIGN 124 ;.InstallHighIrqHandler: 111 .InstallHighIrqHandler: 125 112 add bx, BYTE INTV_IRQ8 - 8 ; Interrupt vector number 126 113 mov si, HIRQ_InterruptServiceRoutineForIrqs8to15 … … 137 124 ; BX, SI 138 125 ;-------------------------------------------------------------------- 139 ALIGN JUMP_ALIGN140 126 .InstallLowIrqHandler: 141 127 add bx, BYTE INTV_IRQ0 ; Interrupt vector number … … 155 141 ; BX 156 142 ;-------------------------------------------------------------------- 157 ALIGN JUMP_ALIGN158 143 Interrupts_InstallHandlerToVectorInBXFromCSSI: 159 144 eSHL_IM bx, 2 ; Shift for DWORD offset … … 172 157 ; AX, BX, DX 173 158 ;-------------------------------------------------------------------- 174 ALIGN JUMP_ALIGN175 159 Interrupts_UnmaskInterruptControllerForDriveInDSDI: 176 160 eMOVZX bx, BYTE [di+DPT.bIdeOff] … … 191 175 ; AX, DX 192 176 ;-------------------------------------------------------------------- 193 ;ALIGN JUMP_ALIGN 194 ;.UnmaskHighIrqController: 177 .UnmaskHighIrqController: 195 178 sub al, 8 ; Slave interrupt number 196 179 mov dx, PORT_8259SL_IMR ; Load Slave Mask Register address … … 208 191 ; AX, DX 209 192 ;-------------------------------------------------------------------- 210 ALIGN JUMP_ALIGN211 193 .UnmaskLowIrqController: 212 194 mov dx, PORT_8259MA_IMR ; Load Mask Register address … … 223 205 ; AX 224 206 ;-------------------------------------------------------------------- 225 ;ALIGN JUMP_ALIGN226 207 .ClearBitFrom8259MaskRegister: 227 208 push cx
Note: See TracChangeset
for help on using the changeset viewer.