-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfs_table.asm
More file actions
226 lines (189 loc) · 5.15 KB
/
Copy pathfs_table.asm
File metadata and controls
226 lines (189 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
; fs_table.asm
; Tiny CircleOS filesystem table sector (CFS1)
;
; Layout (512 bytes total):
; +0..+3 magic "CFS1"
; +4 entry_count
; +5..+15 reserved
; +16.. entries (16 bytes each)
;
; Entry format (16 bytes):
; +0..+7 name[8] (zero-padded)
; +8 start_sector (1-based CHS sector on cyl0/head0)
; +9 sector_count
; +10..11 load_offset
; +12..13 entry_offset
; +14..15 reserved
[BITS 16]
[ORG 0]
%ifndef LS_SECTOR
LS_SECTOR equ 19
%endif
%ifndef LS_SECTORS
LS_SECTORS equ 1
%endif
%ifndef INFO_SECTOR
INFO_SECTOR equ 20
%endif
%ifndef INFO_SECTORS
INFO_SECTORS equ 1
%endif
%ifndef STAT_SECTOR
STAT_SECTOR equ 21
%endif
%ifndef STAT_SECTORS
STAT_SECTORS equ 1
%endif
%ifndef GREET_SECTOR
GREET_SECTOR equ 22
%endif
%ifndef GREET_SECTORS
GREET_SECTORS equ 1
%endif
%ifndef CAT_SECTOR
CAT_SECTOR equ 23
%endif
%ifndef CAT_SECTORS
CAT_SECTORS equ 1
%endif
%ifndef TODO_SECTOR
TODO_SECTOR equ 25
%endif
%ifndef TODO_SECTORS
TODO_SECTORS equ 1
%endif
%ifndef DIR_SECTOR
DIR_SECTOR equ 19
%endif
%ifndef DIR_SECTORS
DIR_SECTORS equ 1
%endif
%ifndef WRITE_SECTOR
WRITE_SECTOR equ 26
%endif
%ifndef WRITE_SECTORS
WRITE_SECTORS equ 1
%endif
%ifndef DATE_SECTOR
DATE_SECTOR equ 22
%endif
%ifndef DATE_SECTORS
DATE_SECTORS equ 1
%endif
%ifndef COUNT_SECTOR
COUNT_SECTOR equ 23
%endif
%ifndef COUNT_SECTORS
COUNT_SECTORS equ 1
%endif
%ifndef STILLALIVE_SECTOR
STILLALIVE_SECTOR equ 24
%endif
%ifndef STILLALIVE_SECTORS
STILLALIVE_SECTORS equ 1
%endif
magic:
db 'C', 'F', 'S', '1'
db 11 ; entry_count (programs + text files)
times 11 db 0 ; reserved header bytes to offset 16
; Entry 0: ls program (list programs)
entry_ls:
db 'l', 's', 0, 0, 0, 0, 0, 0
db LS_SECTOR
db LS_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 1: info program (system info)
entry_info:
db 'i', 'n', 'f', 'o', 0, 0, 0, 0
db INFO_SECTOR
db INFO_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved.
; Entry 2: stat program (program statistics)
entry_stat:
db 's', 't', 'a', 't', 0, 0, 0, 0
db STAT_SECTOR
db STAT_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 3: greet program (greeting)
entry_greet:
db 'g', 'r', 'e', 'e', 't', 0, 0, 0
db GREET_SECTOR
db GREET_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 4: cat program
entry_cat:
db 'c', 'a', 't', 0, 0, 0, 0, 0
db CAT_SECTOR
db CAT_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 5: todo text file
entry_todo:
db 't', 'o', 'd', 'o', 0, 0, 0, 0
db TODO_SECTOR
db TODO_SECTORS
dw 0x0000 ; not used for text files
dw 0x0000 ; not used for text files
db 2 ; entry_type = text
db 0 ; reserved
; Entry 6: dir alias to ls -v metadata output
entry_dir:
db 'd', 'i', 'r', 0, 0, 0, 0, 0
db DIR_SECTOR
db DIR_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 7: write program
entry_write:
db 'w', 'r', 'i', 't', 'e', 0, 0, 0
db WRITE_SECTOR
db WRITE_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 8: date program
entry_date:
db 'd', 'a', 't', 'e', 0, 0, 0, 0
db DATE_SECTOR
db DATE_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 9: lsv alias to ls -v metadata output
entry_lsv:
db 'l', 's', 'v', 0, 0, 0, 0, 0
db DIR_SECTOR
db DIR_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Entry 10: count program
entry_count:
db 'c', 'o', 'u', 'n', 't', 0, 0, 0
db COUNT_SECTOR
db COUNT_SECTORS
dw 0xA000 ; load_offset
dw 0x0000 ; entry_offset
db 1 ; entry_type = program
db 0 ; reserved
; Remaining entries and padding cleared
times (512 - ($ - $$)) db 0