|
| 1 | +;*********************************************************** |
| 2 | +; TSS |
| 3 | +;*********************************************************** |
| 4 | +TSS_0: |
| 5 | +.link: dd 0 |
| 6 | +.esp0: dd SP_TASK_0 - 512 |
| 7 | +.ss0: dd DS_KERNEL |
| 8 | +.esp1: dd 0 |
| 9 | +.ss1: dd 0 |
| 10 | +.esp2: dd 0 |
| 11 | +.ss2: dd 0 |
| 12 | +.cr3: dd CR3_BASE |
| 13 | +.eip: dd 0 |
| 14 | +.eflags: dd 0 |
| 15 | +.eax: dd 0 |
| 16 | +.ecx: dd 0 |
| 17 | +.edx: dd 0 |
| 18 | +.ebx: dd 0 |
| 19 | +.esp: dd 0 |
| 20 | +.ebp: dd 0 |
| 21 | +.esi: dd 0 |
| 22 | +.edi: dd 0 |
| 23 | +.es: dd 0 |
| 24 | +.cs: dd 0 |
| 25 | +.ss: dd 0 |
| 26 | +.ds: dd 0 |
| 27 | +.fs: dd 0 |
| 28 | +.gs: dd 0 |
| 29 | +.ldt: dd 0 |
| 30 | +.io: dd 0 |
| 31 | +.fp_save: times 108 + 4 db 0 |
| 32 | + |
| 33 | +TSS_1: |
| 34 | +.link: dd 0 |
| 35 | +.esp0: dd SP_TASK_1 - 512 |
| 36 | +.ss0: dd DS_KERNEL |
| 37 | +.esp1: dd 0 |
| 38 | +.ss1: dd 0 |
| 39 | +.esp2: dd 0 |
| 40 | +.ss2: dd 0 |
| 41 | +.cr3: dd CR3_BASE |
| 42 | +.eip: dd task_1 |
| 43 | +.eflags: dd 0x0202 |
| 44 | +.eax: dd 0 |
| 45 | +.ecx: dd 0 |
| 46 | +.edx: dd 0 |
| 47 | +.ebx: dd 0 |
| 48 | +.esp: dd SP_TASK_1 |
| 49 | +.ebp: dd 0 |
| 50 | +.esi: dd 0 |
| 51 | +.edi: dd 0 |
| 52 | +.es: dd DS_TASK_1 |
| 53 | +.cs: dd CS_TASK_1 |
| 54 | +.ss: dd DS_TASK_1 |
| 55 | +.ds: dd DS_TASK_1 |
| 56 | +.fs: dd DS_TASK_1 |
| 57 | +.gs: dd DS_TASK_1 |
| 58 | +.ldt: dd SS_LDT |
| 59 | +.io: dd 0 |
| 60 | +.fp_save: times 108 + 4 db 0 |
| 61 | + |
| 62 | +TSS_2: |
| 63 | +.link: dd 0 |
| 64 | +.esp0: dd SP_TASK_2 - 512 |
| 65 | +.ss0: dd DS_KERNEL |
| 66 | +.esp1: dd 0 |
| 67 | +.ss1: dd 0 |
| 68 | +.esp2: dd 0 |
| 69 | +.ss2: dd 0 |
| 70 | +.cr3: dd CR3_BASE |
| 71 | +.eip: dd task_2 |
| 72 | +.eflags: dd 0x0202 |
| 73 | +.eax: dd 0 |
| 74 | +.ecx: dd 0 |
| 75 | +.edx: dd 0 |
| 76 | +.ebx: dd 0 |
| 77 | +.esp: dd SP_TASK_2 |
| 78 | +.ebp: dd 0 |
| 79 | +.esi: dd 0 |
| 80 | +.edi: dd 0 |
| 81 | +.es: dd DS_TASK_2 |
| 82 | +.cs: dd CS_TASK_2 |
| 83 | +.ss: dd DS_TASK_2 |
| 84 | +.ds: dd DS_TASK_2 |
| 85 | +.fs: dd DS_TASK_2 |
| 86 | +.gs: dd DS_TASK_2 |
| 87 | +.ldt: dd SS_LDT |
| 88 | +.io: dd 0 |
| 89 | +.fp_save: times 108 + 4 db 0 |
| 90 | + |
| 91 | +TSS_3: |
| 92 | +.link: dd 0 |
| 93 | +.esp0: dd SP_TASK_3 - 512 |
| 94 | +.ss0: dd DS_KERNEL |
| 95 | +.esp1: dd 0 |
| 96 | +.ss1: dd 0 |
| 97 | +.esp2: dd 0 |
| 98 | +.ss2: dd 0 |
| 99 | +.cr3: dd CR3_BASE |
| 100 | +.eip: dd task_3 |
| 101 | +.eflags: dd 0x0202 |
| 102 | +.eax: dd 0 |
| 103 | +.ecx: dd 0 |
| 104 | +.edx: dd 0 |
| 105 | +.ebx: dd 0 |
| 106 | +.esp: dd SP_TASK_3 |
| 107 | +.ebp: dd 0 |
| 108 | +.esi: dd 0 |
| 109 | +.edi: dd 0 |
| 110 | +.es: dd DS_TASK_3 |
| 111 | +.cs: dd CS_TASK_3 |
| 112 | +.ss: dd DS_TASK_3 |
| 113 | +.ds: dd DS_TASK_3 |
| 114 | +.fs: dd DS_TASK_3 |
| 115 | +.gs: dd DS_TASK_3 |
| 116 | +.ldt: dd SS_LDT |
| 117 | +.io: dd 0 |
| 118 | +.fp_save: times 108 + 4 db 0 |
| 119 | + |
| 120 | +TSS_4: |
| 121 | +.link: dd 0 |
| 122 | +.esp0: dd SP_TASK_4 - 512 |
| 123 | +.ss0: dd DS_KERNEL |
| 124 | +.esp1: dd 0 |
| 125 | +.ss1: dd 0 |
| 126 | +.esp2: dd 0 |
| 127 | +.ss2: dd 0 |
| 128 | +.cr3: dd CR3_TASK_4 |
| 129 | +.eip: dd task_3 |
| 130 | +.eflags: dd 0x0202 |
| 131 | +.eax: dd 0 |
| 132 | +.ecx: dd 0 |
| 133 | +.edx: dd 0 |
| 134 | +.ebx: dd 0 |
| 135 | +.esp: dd SP_TASK_4 |
| 136 | +.ebp: dd 0 |
| 137 | +.esi: dd 0 |
| 138 | +.edi: dd 0 |
| 139 | +.es: dd DS_TASK_4 |
| 140 | +.cs: dd CS_TASK_3 |
| 141 | +.ss: dd DS_TASK_4 |
| 142 | +.ds: dd DS_TASK_4 |
| 143 | +.fs: dd DS_TASK_4 |
| 144 | +.gs: dd DS_TASK_4 |
| 145 | +.ldt: dd SS_LDT |
| 146 | +.io: dd 0 |
| 147 | +.fp_save: times 108 + 4 db 0 |
| 148 | + |
| 149 | +TSS_5: |
| 150 | +.link: dd 0 |
| 151 | +.esp0: dd SP_TASK_5 - 512 |
| 152 | +.ss0: dd DS_KERNEL |
| 153 | +.esp1: dd 0 |
| 154 | +.ss1: dd 0 |
| 155 | +.esp2: dd 0 |
| 156 | +.ss2: dd 0 |
| 157 | +.cr3: dd CR3_TASK_5 |
| 158 | +.eip: dd task_3 |
| 159 | +.eflags: dd 0x0202 |
| 160 | +.eax: dd 0 |
| 161 | +.ecx: dd 0 |
| 162 | +.edx: dd 0 |
| 163 | +.ebx: dd 0 |
| 164 | +.esp: dd SP_TASK_5 |
| 165 | +.ebp: dd 0 |
| 166 | +.esi: dd 0 |
| 167 | +.edi: dd 0 |
| 168 | +.es: dd DS_TASK_5 |
| 169 | +.cs: dd CS_TASK_3 |
| 170 | +.ss: dd DS_TASK_5 |
| 171 | +.ds: dd DS_TASK_5 |
| 172 | +.fs: dd DS_TASK_5 |
| 173 | +.gs: dd DS_TASK_5 |
| 174 | +.ldt: dd SS_LDT |
| 175 | +.io: dd 0 |
| 176 | +.fp_save: times 108 + 4 db 0 |
| 177 | + |
| 178 | +TSS_6: |
| 179 | +.link: dd 0 |
| 180 | +.esp0: dd SP_TASK_6 - 512 |
| 181 | +.ss0: dd DS_KERNEL |
| 182 | +.esp1: dd 0 |
| 183 | +.ss1: dd 0 |
| 184 | +.esp2: dd 0 |
| 185 | +.ss2: dd 0 |
| 186 | +.cr3: dd CR3_TASK_6 |
| 187 | +.eip: dd task_3 |
| 188 | +.eflags: dd 0x0202 |
| 189 | +.eax: dd 0 |
| 190 | +.ecx: dd 0 |
| 191 | +.edx: dd 0 |
| 192 | +.ebx: dd 0 |
| 193 | +.esp: dd SP_TASK_6 |
| 194 | +.ebp: dd 0 |
| 195 | +.esi: dd 0 |
| 196 | +.edi: dd 0 |
| 197 | +.es: dd DS_TASK_6 |
| 198 | +.cs: dd CS_TASK_3 |
| 199 | +.ss: dd DS_TASK_6 |
| 200 | +.ds: dd DS_TASK_6 |
| 201 | +.fs: dd DS_TASK_6 |
| 202 | +.gs: dd DS_TASK_6 |
| 203 | +.ldt: dd SS_LDT |
| 204 | +.io: dd 0 |
| 205 | +.fp_save: times 108 + 4 db 0 |
| 206 | + |
| 207 | +;*********************************************************** |
| 208 | +; グローバルディスクリプタテーブル |
| 209 | +;*********************************************************** |
| 210 | +GDT: dq 0x0000000000000000 |
| 211 | +.cs_kernel: dq 0x00CF9A000000FFFF |
| 212 | +.ds_kernel: dq 0x00CF92000000FFFF |
| 213 | +.ldt dq 0x0000820000000000 |
| 214 | +.tss_0: dq 0x0000890000000067 |
| 215 | +.tss_1: dq 0x0000890000000067 |
| 216 | +.tss_2: dq 0x0000890000000067 |
| 217 | +.tss_3: dq 0x0000890000000067 |
| 218 | +.tss_4: dq 0x0000890000000067 |
| 219 | +.tss_5: dq 0x0000890000000067 |
| 220 | +.tss_6: dq 0x0000890000000067 |
| 221 | +.call_gate: dq 0x0000EC0400080000 |
| 222 | +.end: |
| 223 | + |
| 224 | +CS_KERNEL equ .cs_kernel - GDT |
| 225 | +DS_KERNEL equ .ds_kernel - GDT |
| 226 | +SS_LDT equ .ldt - GDT |
| 227 | +SS_TASK_0 equ .tss_0 - GDT |
| 228 | +SS_TASK_1 equ .tss_1 - GDT |
| 229 | +SS_TASK_2 equ .tss_2 - GDT |
| 230 | +SS_TASK_3 equ .tss_3 - GDT |
| 231 | +SS_TASK_4 equ .tss_4 - GDT |
| 232 | +SS_TASK_5 equ .tss_5 - GDT |
| 233 | +SS_TASK_6 equ .tss_6 - GDT |
| 234 | +SS_GATE_0 equ .call_gate - GDT |
| 235 | + |
| 236 | +GDTR: dw GDT.end - GDT - 1 |
| 237 | + dd GDT |
| 238 | + |
| 239 | +;*********************************************************** |
| 240 | +; ローカルディスクリプタテーブル |
| 241 | +;*********************************************************** |
| 242 | +LDT: dq 0x0000000000000000 |
| 243 | +.cs_task_0: dq 0x00CF9A000000FFFF |
| 244 | +.ds_task_0: dq 0x00CF92000000FFFF |
| 245 | +.cs_task_1: dq 0x00CFFA000000FFFF |
| 246 | +.ds_task_1: dq 0x00CFF2000000FFFF |
| 247 | +.cs_task_2: dq 0x00CFFA000000FFFF |
| 248 | +.ds_task_2: dq 0x00CFF2000000FFFF |
| 249 | +.cs_task_3: dq 0x00CFFA000000FFFF |
| 250 | +.ds_task_3: dq 0x00CFF2000000FFFF |
| 251 | +.ds_task_4: dq 0x00CFF2000000FFFF |
| 252 | +.ds_task_5: dq 0x00CFF2000000FFFF |
| 253 | +.ds_task_6: dq 0x00CFF2000000FFFF |
| 254 | +.end: |
| 255 | + |
| 256 | +CS_TASK_0 equ (.cs_task_0 - LDT) | 4 |
| 257 | +DS_TASK_0 equ (.ds_task_0 - LDT) | 4 |
| 258 | +CS_TASK_1 equ (.cs_task_1 - LDT) | 4 | 3 |
| 259 | +DS_TASK_1 equ (.ds_task_1 - LDT) | 4 | 3 |
| 260 | +CS_TASK_2 equ (.cs_task_2 - LDT) | 4 | 3 |
| 261 | +DS_TASK_2 equ (.ds_task_2 - LDT) | 4 | 3 |
| 262 | +CS_TASK_3 equ (.cs_task_3 - LDT) | 4 | 3 |
| 263 | +DS_TASK_3 equ (.ds_task_3 - LDT) | 4 | 3 |
| 264 | +DS_TASK_4 equ (.ds_task_4 - LDT) | 4 | 3 |
| 265 | +DS_TASK_5 equ (.ds_task_5 - LDT) | 4 | 3 |
| 266 | +DS_TASK_6 equ (.ds_task_6 - LDT) | 4 | 3 |
| 267 | + |
| 268 | +LDT_LIMIT equ .end - LDT - 1 |
0 commit comments