[feat] 100Hz task switch
This commit is contained in:
@@ -0,0 +1,589 @@
|
||||
.intel_syntax noprefix
|
||||
|
||||
// ISR stub table — 256 entries
|
||||
// For exceptions without error code, we push a dummy 0
|
||||
// For exceptions with error code, the CPU already pushed it
|
||||
|
||||
// Macros for generating ISR stubs
|
||||
.macro ISR_NOERR num
|
||||
.global isr_stub_\num
|
||||
isr_stub_\num:
|
||||
push 0 // dummy error code
|
||||
push \num // vector number
|
||||
jmp isr_common
|
||||
.endm
|
||||
|
||||
.macro ISR_ERR num
|
||||
.global isr_stub_\num
|
||||
isr_stub_\num:
|
||||
// error code already on stack from CPU
|
||||
push \num // vector number
|
||||
jmp isr_common
|
||||
.endm
|
||||
|
||||
// === Exceptions 0-31 ===
|
||||
ISR_NOERR 0 // #DE Divide Error
|
||||
ISR_NOERR 1 // #DB Debug
|
||||
ISR_NOERR 2 // NMI
|
||||
ISR_NOERR 3 // #BP Breakpoint
|
||||
ISR_NOERR 4 // #OF Overflow
|
||||
ISR_NOERR 5 // #BR Bound Range Exceeded
|
||||
ISR_NOERR 6 // #UD Invalid Opcode
|
||||
ISR_NOERR 7 // #NM Device Not Available
|
||||
ISR_ERR 8 // #DF Double Fault
|
||||
ISR_NOERR 9 // Coprocessor Segment Overrun (reserved)
|
||||
ISR_ERR 10 // #TS Invalid TSS
|
||||
ISR_ERR 11 // #NP Segment Not Present
|
||||
ISR_ERR 12 // #SS Stack-Segment Fault
|
||||
ISR_ERR 13 // #GP General Protection
|
||||
ISR_ERR 14 // #PF Page Fault
|
||||
ISR_NOERR 15 // Reserved
|
||||
ISR_NOERR 16 // #MF x87 FPU Error
|
||||
ISR_ERR 17 // #AC Alignment Check
|
||||
ISR_NOERR 18 // #MC Machine Check
|
||||
ISR_NOERR 19 // #XM SIMD Exception
|
||||
ISR_NOERR 20 // Virtualization Exception
|
||||
ISR_ERR 21 // #CP Control Protection
|
||||
ISR_NOERR 22
|
||||
ISR_NOERR 23
|
||||
ISR_NOERR 24
|
||||
ISR_NOERR 25
|
||||
ISR_NOERR 26
|
||||
ISR_NOERR 27
|
||||
ISR_NOERR 28
|
||||
ISR_ERR 29 // Hypervisor Injection
|
||||
ISR_ERR 30 // #SX Security Exception
|
||||
ISR_NOERR 31 // Reserved
|
||||
|
||||
// === Hardware IRQs 32-255 ===
|
||||
ISR_NOERR 32 // PIT timer (IRQ 0)
|
||||
ISR_NOERR 33 // Keyboard (IRQ 1)
|
||||
ISR_NOERR 34 // Cascade (IRQ 2)
|
||||
ISR_NOERR 35 // COM2 (IRQ 3)
|
||||
ISR_NOERR 36 // COM1 (IRQ 4)
|
||||
ISR_NOERR 37 // LPT2 (IRQ 5)
|
||||
ISR_NOERR 38 // Floppy (IRQ 6)
|
||||
ISR_NOERR 39 // LPT1 / Spurious (IRQ 7)
|
||||
ISR_NOERR 40 // CMOS RTC (IRQ 8)
|
||||
ISR_NOERR 41 // ACPI (IRQ 9)
|
||||
ISR_NOERR 42 // Open (IRQ 10)
|
||||
ISR_NOERR 43 // Open (IRQ 11)
|
||||
ISR_NOERR 44 // PS/2 Mouse (IRQ 12)
|
||||
ISR_NOERR 45 // FPU (IRQ 13)
|
||||
ISR_NOERR 46 // Primary ATA (IRQ 14)
|
||||
ISR_NOERR 47 // Secondary ATA (IRQ 15)
|
||||
|
||||
// Vectors 48-255: software / unused
|
||||
ISR_NOERR 48
|
||||
ISR_NOERR 49
|
||||
ISR_NOERR 50
|
||||
ISR_NOERR 51
|
||||
ISR_NOERR 52
|
||||
ISR_NOERR 53
|
||||
ISR_NOERR 54
|
||||
ISR_NOERR 55
|
||||
ISR_NOERR 56
|
||||
ISR_NOERR 57
|
||||
ISR_NOERR 58
|
||||
ISR_NOERR 59
|
||||
ISR_NOERR 60
|
||||
ISR_NOERR 61
|
||||
ISR_NOERR 62
|
||||
ISR_NOERR 63
|
||||
ISR_NOERR 64
|
||||
ISR_NOERR 65
|
||||
ISR_NOERR 66
|
||||
ISR_NOERR 67
|
||||
ISR_NOERR 68
|
||||
ISR_NOERR 69
|
||||
ISR_NOERR 70
|
||||
ISR_NOERR 71
|
||||
ISR_NOERR 72
|
||||
ISR_NOERR 73
|
||||
ISR_NOERR 74
|
||||
ISR_NOERR 75
|
||||
ISR_NOERR 76
|
||||
ISR_NOERR 77
|
||||
ISR_NOERR 78
|
||||
ISR_NOERR 79
|
||||
ISR_NOERR 80
|
||||
ISR_NOERR 81
|
||||
ISR_NOERR 82
|
||||
ISR_NOERR 83
|
||||
ISR_NOERR 84
|
||||
ISR_NOERR 85
|
||||
ISR_NOERR 86
|
||||
ISR_NOERR 87
|
||||
ISR_NOERR 88
|
||||
ISR_NOERR 89
|
||||
ISR_NOERR 90
|
||||
ISR_NOERR 91
|
||||
ISR_NOERR 92
|
||||
ISR_NOERR 93
|
||||
ISR_NOERR 94
|
||||
ISR_NOERR 95
|
||||
ISR_NOERR 96
|
||||
ISR_NOERR 97
|
||||
ISR_NOERR 98
|
||||
ISR_NOERR 99
|
||||
ISR_NOERR 100
|
||||
ISR_NOERR 101
|
||||
ISR_NOERR 102
|
||||
ISR_NOERR 103
|
||||
ISR_NOERR 104
|
||||
ISR_NOERR 105
|
||||
ISR_NOERR 106
|
||||
ISR_NOERR 107
|
||||
ISR_NOERR 108
|
||||
ISR_NOERR 109
|
||||
ISR_NOERR 110
|
||||
ISR_NOERR 111
|
||||
ISR_NOERR 112
|
||||
ISR_NOERR 113
|
||||
ISR_NOERR 114
|
||||
ISR_NOERR 115
|
||||
ISR_NOERR 116
|
||||
ISR_NOERR 117
|
||||
ISR_NOERR 118
|
||||
ISR_NOERR 119
|
||||
ISR_NOERR 120
|
||||
ISR_NOERR 121
|
||||
ISR_NOERR 122
|
||||
ISR_NOERR 123
|
||||
ISR_NOERR 124
|
||||
ISR_NOERR 125
|
||||
ISR_NOERR 126
|
||||
ISR_NOERR 127
|
||||
ISR_NOERR 128
|
||||
ISR_NOERR 129
|
||||
ISR_NOERR 130
|
||||
ISR_NOERR 131
|
||||
ISR_NOERR 132
|
||||
ISR_NOERR 133
|
||||
ISR_NOERR 134
|
||||
ISR_NOERR 135
|
||||
ISR_NOERR 136
|
||||
ISR_NOERR 137
|
||||
ISR_NOERR 138
|
||||
ISR_NOERR 139
|
||||
ISR_NOERR 140
|
||||
ISR_NOERR 141
|
||||
ISR_NOERR 142
|
||||
ISR_NOERR 143
|
||||
ISR_NOERR 144
|
||||
ISR_NOERR 145
|
||||
ISR_NOERR 146
|
||||
ISR_NOERR 147
|
||||
ISR_NOERR 148
|
||||
ISR_NOERR 149
|
||||
ISR_NOERR 150
|
||||
ISR_NOERR 151
|
||||
ISR_NOERR 152
|
||||
ISR_NOERR 153
|
||||
ISR_NOERR 154
|
||||
ISR_NOERR 155
|
||||
ISR_NOERR 156
|
||||
ISR_NOERR 157
|
||||
ISR_NOERR 158
|
||||
ISR_NOERR 159
|
||||
ISR_NOERR 160
|
||||
ISR_NOERR 161
|
||||
ISR_NOERR 162
|
||||
ISR_NOERR 163
|
||||
ISR_NOERR 164
|
||||
ISR_NOERR 165
|
||||
ISR_NOERR 166
|
||||
ISR_NOERR 167
|
||||
ISR_NOERR 168
|
||||
ISR_NOERR 169
|
||||
ISR_NOERR 170
|
||||
ISR_NOERR 171
|
||||
ISR_NOERR 172
|
||||
ISR_NOERR 173
|
||||
ISR_NOERR 174
|
||||
ISR_NOERR 175
|
||||
ISR_NOERR 176
|
||||
ISR_NOERR 177
|
||||
ISR_NOERR 178
|
||||
ISR_NOERR 179
|
||||
ISR_NOERR 180
|
||||
ISR_NOERR 181
|
||||
ISR_NOERR 182
|
||||
ISR_NOERR 183
|
||||
ISR_NOERR 184
|
||||
ISR_NOERR 185
|
||||
ISR_NOERR 186
|
||||
ISR_NOERR 187
|
||||
ISR_NOERR 188
|
||||
ISR_NOERR 189
|
||||
ISR_NOERR 190
|
||||
ISR_NOERR 191
|
||||
ISR_NOERR 192
|
||||
ISR_NOERR 193
|
||||
ISR_NOERR 194
|
||||
ISR_NOERR 195
|
||||
ISR_NOERR 196
|
||||
ISR_NOERR 197
|
||||
ISR_NOERR 198
|
||||
ISR_NOERR 199
|
||||
ISR_NOERR 200
|
||||
ISR_NOERR 201
|
||||
ISR_NOERR 202
|
||||
ISR_NOERR 203
|
||||
ISR_NOERR 204
|
||||
ISR_NOERR 205
|
||||
ISR_NOERR 206
|
||||
ISR_NOERR 207
|
||||
ISR_NOERR 208
|
||||
ISR_NOERR 209
|
||||
ISR_NOERR 210
|
||||
ISR_NOERR 211
|
||||
ISR_NOERR 212
|
||||
ISR_NOERR 213
|
||||
ISR_NOERR 214
|
||||
ISR_NOERR 215
|
||||
ISR_NOERR 216
|
||||
ISR_NOERR 217
|
||||
ISR_NOERR 218
|
||||
ISR_NOERR 219
|
||||
ISR_NOERR 220
|
||||
ISR_NOERR 221
|
||||
ISR_NOERR 222
|
||||
ISR_NOERR 223
|
||||
ISR_NOERR 224
|
||||
ISR_NOERR 225
|
||||
ISR_NOERR 226
|
||||
ISR_NOERR 227
|
||||
ISR_NOERR 228
|
||||
ISR_NOERR 229
|
||||
ISR_NOERR 230
|
||||
ISR_NOERR 231
|
||||
ISR_NOERR 232
|
||||
ISR_NOERR 233
|
||||
ISR_NOERR 234
|
||||
ISR_NOERR 235
|
||||
ISR_NOERR 236
|
||||
ISR_NOERR 237
|
||||
ISR_NOERR 238
|
||||
ISR_NOERR 239
|
||||
ISR_NOERR 240
|
||||
ISR_NOERR 241
|
||||
ISR_NOERR 242
|
||||
ISR_NOERR 243
|
||||
ISR_NOERR 244
|
||||
ISR_NOERR 245
|
||||
ISR_NOERR 246
|
||||
ISR_NOERR 247
|
||||
ISR_NOERR 248
|
||||
ISR_NOERR 249
|
||||
ISR_NOERR 250
|
||||
ISR_NOERR 251
|
||||
ISR_NOERR 252
|
||||
ISR_NOERR 253
|
||||
ISR_NOERR 254
|
||||
ISR_NOERR 255
|
||||
|
||||
// === Common ISR handler ===
|
||||
// Stack layout on entry (from ISR stub):
|
||||
// [rsp+0x00] vector (pushed by stub)
|
||||
// [rsp+0x08] error_code (pushed by stub or CPU)
|
||||
// [rsp+0x10] rip (pushed by CPU)
|
||||
// [rsp+0x18] cs (pushed by CPU)
|
||||
// [rsp+0x20] rflags (pushed by CPU)
|
||||
// [rsp+0x28] rsp (pushed by CPU)
|
||||
// [rsp+0x30] ss (pushed by CPU)
|
||||
|
||||
isr_common:
|
||||
// Save all general-purpose registers to form trap_frame
|
||||
push r11
|
||||
push r10
|
||||
push r9
|
||||
push r8
|
||||
push rdi
|
||||
push rsi
|
||||
push rdx
|
||||
push rcx
|
||||
push rax
|
||||
|
||||
// Now RSP points to trap_frame struct, pass as argument
|
||||
mov rdi, rsp
|
||||
call isr_dispatch
|
||||
|
||||
// Restore registers
|
||||
pop rax
|
||||
pop rcx
|
||||
pop rdx
|
||||
pop rsi
|
||||
pop rdi
|
||||
pop r8
|
||||
pop r9
|
||||
pop r10
|
||||
pop r11
|
||||
|
||||
// Skip vector + error_code (16 bytes)
|
||||
add rsp, 16
|
||||
|
||||
iretq
|
||||
|
||||
// === ISR stub table (array of pointers) ===
|
||||
.section .data
|
||||
.global isr_stub_table
|
||||
isr_stub_table:
|
||||
.quad isr_stub_0
|
||||
.quad isr_stub_1
|
||||
.quad isr_stub_2
|
||||
.quad isr_stub_3
|
||||
.quad isr_stub_4
|
||||
.quad isr_stub_5
|
||||
.quad isr_stub_6
|
||||
.quad isr_stub_7
|
||||
.quad isr_stub_8
|
||||
.quad isr_stub_9
|
||||
.quad isr_stub_10
|
||||
.quad isr_stub_11
|
||||
.quad isr_stub_12
|
||||
.quad isr_stub_13
|
||||
.quad isr_stub_14
|
||||
.quad isr_stub_15
|
||||
.quad isr_stub_16
|
||||
.quad isr_stub_17
|
||||
.quad isr_stub_18
|
||||
.quad isr_stub_19
|
||||
.quad isr_stub_20
|
||||
.quad isr_stub_21
|
||||
.quad isr_stub_22
|
||||
.quad isr_stub_23
|
||||
.quad isr_stub_24
|
||||
.quad isr_stub_25
|
||||
.quad isr_stub_26
|
||||
.quad isr_stub_27
|
||||
.quad isr_stub_28
|
||||
.quad isr_stub_29
|
||||
.quad isr_stub_30
|
||||
.quad isr_stub_31
|
||||
.quad isr_stub_32
|
||||
.quad isr_stub_33
|
||||
.quad isr_stub_34
|
||||
.quad isr_stub_35
|
||||
.quad isr_stub_36
|
||||
.quad isr_stub_37
|
||||
.quad isr_stub_38
|
||||
.quad isr_stub_39
|
||||
.quad isr_stub_40
|
||||
.quad isr_stub_41
|
||||
.quad isr_stub_42
|
||||
.quad isr_stub_43
|
||||
.quad isr_stub_44
|
||||
.quad isr_stub_45
|
||||
.quad isr_stub_46
|
||||
.quad isr_stub_47
|
||||
.quad isr_stub_48
|
||||
.quad isr_stub_49
|
||||
.quad isr_stub_50
|
||||
.quad isr_stub_51
|
||||
.quad isr_stub_52
|
||||
.quad isr_stub_53
|
||||
.quad isr_stub_54
|
||||
.quad isr_stub_55
|
||||
.quad isr_stub_56
|
||||
.quad isr_stub_57
|
||||
.quad isr_stub_58
|
||||
.quad isr_stub_59
|
||||
.quad isr_stub_60
|
||||
.quad isr_stub_61
|
||||
.quad isr_stub_62
|
||||
.quad isr_stub_63
|
||||
.quad isr_stub_64
|
||||
.quad isr_stub_65
|
||||
.quad isr_stub_66
|
||||
.quad isr_stub_67
|
||||
.quad isr_stub_68
|
||||
.quad isr_stub_69
|
||||
.quad isr_stub_70
|
||||
.quad isr_stub_71
|
||||
.quad isr_stub_72
|
||||
.quad isr_stub_73
|
||||
.quad isr_stub_74
|
||||
.quad isr_stub_75
|
||||
.quad isr_stub_76
|
||||
.quad isr_stub_77
|
||||
.quad isr_stub_78
|
||||
.quad isr_stub_79
|
||||
.quad isr_stub_80
|
||||
.quad isr_stub_81
|
||||
.quad isr_stub_82
|
||||
.quad isr_stub_83
|
||||
.quad isr_stub_84
|
||||
.quad isr_stub_85
|
||||
.quad isr_stub_86
|
||||
.quad isr_stub_87
|
||||
.quad isr_stub_88
|
||||
.quad isr_stub_89
|
||||
.quad isr_stub_90
|
||||
.quad isr_stub_91
|
||||
.quad isr_stub_92
|
||||
.quad isr_stub_93
|
||||
.quad isr_stub_94
|
||||
.quad isr_stub_95
|
||||
.quad isr_stub_96
|
||||
.quad isr_stub_97
|
||||
.quad isr_stub_98
|
||||
.quad isr_stub_99
|
||||
.quad isr_stub_100
|
||||
.quad isr_stub_101
|
||||
.quad isr_stub_102
|
||||
.quad isr_stub_103
|
||||
.quad isr_stub_104
|
||||
.quad isr_stub_105
|
||||
.quad isr_stub_106
|
||||
.quad isr_stub_107
|
||||
.quad isr_stub_108
|
||||
.quad isr_stub_109
|
||||
.quad isr_stub_110
|
||||
.quad isr_stub_111
|
||||
.quad isr_stub_112
|
||||
.quad isr_stub_113
|
||||
.quad isr_stub_114
|
||||
.quad isr_stub_115
|
||||
.quad isr_stub_116
|
||||
.quad isr_stub_117
|
||||
.quad isr_stub_118
|
||||
.quad isr_stub_119
|
||||
.quad isr_stub_120
|
||||
.quad isr_stub_121
|
||||
.quad isr_stub_122
|
||||
.quad isr_stub_123
|
||||
.quad isr_stub_124
|
||||
.quad isr_stub_125
|
||||
.quad isr_stub_126
|
||||
.quad isr_stub_127
|
||||
.quad isr_stub_128
|
||||
.quad isr_stub_129
|
||||
.quad isr_stub_130
|
||||
.quad isr_stub_131
|
||||
.quad isr_stub_132
|
||||
.quad isr_stub_133
|
||||
.quad isr_stub_134
|
||||
.quad isr_stub_135
|
||||
.quad isr_stub_136
|
||||
.quad isr_stub_137
|
||||
.quad isr_stub_138
|
||||
.quad isr_stub_139
|
||||
.quad isr_stub_140
|
||||
.quad isr_stub_141
|
||||
.quad isr_stub_142
|
||||
.quad isr_stub_143
|
||||
.quad isr_stub_144
|
||||
.quad isr_stub_145
|
||||
.quad isr_stub_146
|
||||
.quad isr_stub_147
|
||||
.quad isr_stub_148
|
||||
.quad isr_stub_149
|
||||
.quad isr_stub_150
|
||||
.quad isr_stub_151
|
||||
.quad isr_stub_152
|
||||
.quad isr_stub_153
|
||||
.quad isr_stub_154
|
||||
.quad isr_stub_155
|
||||
.quad isr_stub_156
|
||||
.quad isr_stub_157
|
||||
.quad isr_stub_158
|
||||
.quad isr_stub_159
|
||||
.quad isr_stub_160
|
||||
.quad isr_stub_161
|
||||
.quad isr_stub_162
|
||||
.quad isr_stub_163
|
||||
.quad isr_stub_164
|
||||
.quad isr_stub_165
|
||||
.quad isr_stub_166
|
||||
.quad isr_stub_167
|
||||
.quad isr_stub_168
|
||||
.quad isr_stub_169
|
||||
.quad isr_stub_170
|
||||
.quad isr_stub_171
|
||||
.quad isr_stub_172
|
||||
.quad isr_stub_173
|
||||
.quad isr_stub_174
|
||||
.quad isr_stub_175
|
||||
.quad isr_stub_176
|
||||
.quad isr_stub_177
|
||||
.quad isr_stub_178
|
||||
.quad isr_stub_179
|
||||
.quad isr_stub_180
|
||||
.quad isr_stub_181
|
||||
.quad isr_stub_182
|
||||
.quad isr_stub_183
|
||||
.quad isr_stub_184
|
||||
.quad isr_stub_185
|
||||
.quad isr_stub_186
|
||||
.quad isr_stub_187
|
||||
.quad isr_stub_188
|
||||
.quad isr_stub_189
|
||||
.quad isr_stub_190
|
||||
.quad isr_stub_191
|
||||
.quad isr_stub_192
|
||||
.quad isr_stub_193
|
||||
.quad isr_stub_194
|
||||
.quad isr_stub_195
|
||||
.quad isr_stub_196
|
||||
.quad isr_stub_197
|
||||
.quad isr_stub_198
|
||||
.quad isr_stub_199
|
||||
.quad isr_stub_200
|
||||
.quad isr_stub_201
|
||||
.quad isr_stub_202
|
||||
.quad isr_stub_203
|
||||
.quad isr_stub_204
|
||||
.quad isr_stub_205
|
||||
.quad isr_stub_206
|
||||
.quad isr_stub_207
|
||||
.quad isr_stub_208
|
||||
.quad isr_stub_209
|
||||
.quad isr_stub_210
|
||||
.quad isr_stub_211
|
||||
.quad isr_stub_212
|
||||
.quad isr_stub_213
|
||||
.quad isr_stub_214
|
||||
.quad isr_stub_215
|
||||
.quad isr_stub_216
|
||||
.quad isr_stub_217
|
||||
.quad isr_stub_218
|
||||
.quad isr_stub_219
|
||||
.quad isr_stub_220
|
||||
.quad isr_stub_221
|
||||
.quad isr_stub_222
|
||||
.quad isr_stub_223
|
||||
.quad isr_stub_224
|
||||
.quad isr_stub_225
|
||||
.quad isr_stub_226
|
||||
.quad isr_stub_227
|
||||
.quad isr_stub_228
|
||||
.quad isr_stub_229
|
||||
.quad isr_stub_230
|
||||
.quad isr_stub_231
|
||||
.quad isr_stub_232
|
||||
.quad isr_stub_233
|
||||
.quad isr_stub_234
|
||||
.quad isr_stub_235
|
||||
.quad isr_stub_236
|
||||
.quad isr_stub_237
|
||||
.quad isr_stub_238
|
||||
.quad isr_stub_239
|
||||
.quad isr_stub_240
|
||||
.quad isr_stub_241
|
||||
.quad isr_stub_242
|
||||
.quad isr_stub_243
|
||||
.quad isr_stub_244
|
||||
.quad isr_stub_245
|
||||
.quad isr_stub_246
|
||||
.quad isr_stub_247
|
||||
.quad isr_stub_248
|
||||
.quad isr_stub_249
|
||||
.quad isr_stub_250
|
||||
.quad isr_stub_251
|
||||
.quad isr_stub_252
|
||||
.quad isr_stub_253
|
||||
.quad isr_stub_254
|
||||
.quad isr_stub_255
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
Reference in New Issue
Block a user