Skip to content

Commit 59525a3

Browse files
committed
add 43_fat
1 parent 2c2e2aa commit 59525a3

File tree

15 files changed

+6591
-0
lines changed

15 files changed

+6591
-0
lines changed

src/43_fat/boot.bin

8 KB
Binary file not shown.

src/43_fat/boot.img

16 KB
Binary file not shown.

src/43_fat/boot.lst

Lines changed: 1543 additions & 0 deletions
Large diffs are not rendered by default.

src/43_fat/boot.s

Lines changed: 496 additions & 0 deletions
Large diffs are not rendered by default.

src/43_fat/descriptor.s

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
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

src/43_fat/fat.s

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
;***********************************************************
2+
; FAT:FAT-1
3+
;***********************************************************
4+
times (FAT1_START) - ($ - $$) db 0x00
5+
;-----------------------------------------------------------
6+
FAT1:
7+
db 0xFF, 0xFF ; �N���X�^:0
8+
dw 0xFFFF ; �N���X�^:1
9+
dw 0xFFFF
10+
11+
;***********************************************************
12+
; FAT:FAT-2
13+
;***********************************************************
14+
times (FAT2_START) - ($ - $$) db 0x00
15+
;-----------------------------------------------------------
16+
FAT2:
17+
db 0xFF, 0xFF ; �N���X�^:0
18+
dw 0xFFFF ; �N���X�^:1
19+
dw 0xFFFF
20+
21+
;***********************************************************
22+
; FAT:ルートディレクトリ領域
23+
;***********************************************************
24+
times (ROOT_START) - ($ - $$) db 0x00
25+
;-----------------------------------------------------------
26+
FAT_ROOT:
27+
db 'BOOTABLE', 'DSK'
28+
db ATTR_ARCHIVE | ATTR_VOLUME_ID
29+
db 0x00
30+
db 0x00
31+
dw (0 << 11) | (0 << 5) | (0 / 2)
32+
dw (0 << 9) | (0 << 5) | (1)
33+
dw (0 << 9) | (0 << 5) | (1)
34+
dw 0x0000
35+
dw (0 << 11) | (0 << 5) | (0 / 2)
36+
dw (0 << 9) | (0 << 5) | (1)
37+
dw 0
38+
dd 0
39+
40+
db 'SPECIAL ', 'TXT'
41+
db ATTR_ARCHIVE
42+
db 0x00
43+
db 0
44+
dw (0 << 11) | (0 << 5) | (0 / 2)
45+
dw (0 << 9) | (1 << 5) | (1)
46+
dw (0 << 9) | (1 << 5) | (1)
47+
dw 0x0000
48+
dw (0 << 11) | (0 << 5) | (0 / 2)
49+
dw (0 << 9) | (1 << 5) | (1)
50+
dw 2
51+
dd FILE.end - FILE
52+
53+
;***********************************************************
54+
; FAT:データ領域
55+
;***********************************************************
56+
times FILE_START - ($ - $$) db 0x00
57+
;-----------------------------------------------------------
58+
FILE: db 'hello, FAT!'
59+
.end: db 0
60+
61+
ALIGN 512, db 0x00
62+
times (512 * 63) db 0x00

src/43_fat/kernel.bin

8 KB
Binary file not shown.

0 commit comments

Comments
 (0)