[feat] 100Hz task switch

This commit is contained in:
2026-05-31 18:35:25 +08:00
Unverified
parent 4ff227bc75
commit daccb0a763
16 changed files with 1172 additions and 36 deletions
+589
View File
@@ -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