📄 boot.lst
字号:
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 1
boot.ASM
instinct - bootloader 0.0.3
1 %TITLE "instinct - bootloader 0.0.3"
2
3 ; Robert Lee <robert.lee@lostcommunity.org>
4 ; Tuesday, July 04, 2000
5 ; Created file as experimental bootloader
6 ; Thursday, January 04, 2001
7 ; Support for second-stage bootloader
8 ; Sunday, October 13, 2002
9 ; Rewrote for IDEAL mode and style
10 ;
11 ; Simeon Maxein <smaxein@freenet.de>
12 ; ? Sunday, October 13, 2002
13 ; Support for FAT12
14
15 IDEAL
16 0000 MODEL SMALL, C
17 0000 STACK
18 JUMPS
19 LOCALS @@
20 0400 CODESEG
21 P386N
22 0000 start:
23 0000 EB 47 JMP main
24 0002 90 NOP
25 0003 69 6F 73 78 20 30 2E+ bOSOEMName DB 'iosx 0.0'
26 30
27 000B 0200 wByPSector DW 512
28 000D 01 bSecPClust DB 1
29 000E 0001 wRsvdSects DW 1 ; Boot Sect
30 0010 02 bFATTables DB 2
31 0011 00E0 wRootEntrs DW 224
32 0013 0B40 wSmSectors DW 2880 ; All
33 0015 F0 bMediaTypw DB 240 ; 1.44MB Floppy
34 0016 0009 wFATSector DW 9
35 0018 0012 wSectsPTrk DW 18
36 001A 0002 wDrivHeads DW 2
37 001C 00000000 dHidnSects DD 0
38 0020 00000000 dLgSectors DD 0
39 0024 00 bDrivNumbr DB 0 ; A:
40 0025 00 bNTDrtyFlg DB 0
41 0026 29 bExBPBSign DB 29h ; Extended
42 0027 00000000 dDskSerial DD 0 ; Blank
43 002B 20 20 20 20 20 20 20+ bDiskLabel DB ' '
44 20 20 20 20
45 0036 46 41 54 31 32 20 20+ bDskFilSys DB 'FAT12 '
46 20
47
48 003E 43 4F 52 45 20 20 20+ bFilename DB 'CORE SYS'
49 20 53 59 53
50
51 0049 main:
52 0049 EA DB 0EAh
53 004A 004Er 07C0 DW OFFSET L01, 7C0h
54 004E L01:
55 004E 8C C8 MOV AX, CS
56 0050 8E D8 MOV DS, AX
57 0052 8E C0 MOV ES, AX
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 2
boot.ASM
instinct - bootloader 0.0.3
58 0054 2E: 88 16 0024r MOV [bDrivNumbr], DL
59
60 CALL readSects, 01d, 09d, 2000h ; FAT
1 61 0059 68 2000 PUSH 2000H
1 62 005C 6A 09 PUSH 09D
1 63 005E 6A 01 PUSH 01D
1 64 0060 E8 0063 CALL READSECTS
1 65 0063 83 C4 06 ADD SP,00006h
66 0066 72 2D JC Fail
67 CALL readSects, 19d, 14d, 2500h ; Root Dir
1 68 0068 68 2500 PUSH 2500H
1 69 006B 6A 0E PUSH 14D
1 70 006D 6A 13 PUSH 19D
1 71 006F E8 0054 CALL READSECTS
1 72 0072 83 C4 06 ADD SP,00006h
73 0075 72 1E JC Fail
74 CALL findFile, OFFSET bFilename, 2500h
1 75 0077 68 2500 PUSH 2500H
1 76 007A 68 003Er PUSH OFFSET BFILENAME
1 77 007D E8 00FD CALL FINDFILE
1 78 0080 83 C4 04 ADD SP,00004h
79 0083 72 10 JC Fail
80 CALL chainLoad, AX, 0050h ; core.sys
1 81 0085 6A 50 PUSH 0050H
1 82 0087 50 PUSH AX
1 83 0088 E8 00A7 CALL CHAINLOAD
1 84 008B 83 C4 04 ADD SP,00004h
85 008E 72 05 JC Fail
86
87 0090 EA DB 0EAh
88 0091 0000 0050 DW 0000h, 0050h
89
90 0095 Fail:
91 0095 B0 45 MOV AL, 'E'
92 0097 BB 0007 MOV BX, 0007h
93 009A B4 0E MOV AH, 0Eh
94 009C CD 10 INT 10h
95 009E EB FE JMP $
96
97
98
99 00A0 PROC getCHS NEAR @@address:WORD
1 100 00A0 C8 0000 00 ENTERW 00000h,0
1 101 00A4 8B 46 04 MOV AX, [@@address]
102 00A7 33 D2 XOR DX, DX
103 00A9 2E: F7 36 0018r DIV [wSectsPTrk]
104 00AE 42 INC DX
105 00AF 2E: 88 16 0202r MOV [bSECT], DL
106 00B4 33 D2 XOR DX, DX
107 00B6 2E: F7 36 001Ar DIV [wDrivHeads]
108 00BB 2E: A2 0200r MOV [bCYL], AL
109 00BF 2E: 88 16 0201r MOV [bHEAD], DL
1 110 00C4 C9 LEAVEW
1 111 00C5 C3 RET 00000h
112
113 00C6 ENDP getCHS
114
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 3
boot.ASM
instinct - bootloader 0.0.3
115 00C6 PROC readSects NEAR @@SectStart:WORD, @@SectCount:WORD, @@LoadSeg:WORD
116 LOCAL @@Attempt:BYTE
1 117 00C6 C8 0002 00 ENTERW 00002h,0
1 118 00CA 06 PUSH ES
119 00CB C6 46 FE 03 MOV [@@Attempt], 03h
120
121 00CF @@sectLoop:
122 00CF 83 7E 06 00 CMP [@@SectCount], 0000h
123 00D3 74 46 JE @@success
124 CALL getCHS, [@@SectStart]
1 125 00D5 FF 76 04 PUSH [@@SECTSTART]
1 126 00D8 E8 FFC5 CALL GETCHS
1 127 00DB 83 C4 02 ADD SP,00002h
128 00DE 8B 46 08 MOV AX, [@@LoadSeg]
129 00E1 8E C0 MOV ES, AX
130 00E3 33 DB XOR BX, BX
131 00E5 2E: 8A 2E 0200r MOV CH, [bCYL]
132 00EA 2E: 8A 0E 0202r MOV CL, [bSECT]
133 00EF 2E: 8A 36 0201r MOV DH, [bHEAD]
134 00F4 2E: 8A 16 0024r MOV DL, [bDrivNumbr]
135 00F9 B0 01 MOV AL, 01h
136 00FB B4 02 MOV AH, 02h
137 00FD CD 13 INT 13h
138 00FF 73 0E JNC @@L01
139 0101 FE 4E FE DEC [@@Attempt]
140 0104 80 7E FE 00 CMP [@@Attempt], 0
141 0108 74 15 JE @@failure
142 010A E8 0016 CALL resetDisk
143 010D EB C0 JMP @@sectLoop
144 010F @@L01:
145 010F 83 46 08 20 ADD [@@LoadSeg], 20h
146 0113 FF 46 04 INC [@@SectStart]
147 0116 FF 4E 06 DEC [@@SectCount]
148 0119 EB B4 JMP @@sectLoop
149
150 011B @@success:
151 011B 07 POP ES
152 011C F8 CLC
1 153 011D C9 LEAVEW
1 154 011E C3 RET 00000h
155
156 011F @@failure:
157 011F 07 POP ES
158 0120 F9 STC
1 159 0121 C9 LEAVEW
1 160 0122 C3 RET 00000h
161 0123 ENDP readSects
162
163 0123 PROC resetDisk NEAR
164 0123 2E: 8A 16 0024r MOV DL, [bDrivNumbr]
165 0128 B4 00 MOV AH, 0
166 012A CD 13 INT 13h
167 012C 72 02 JC @@failure
168
169 012E @@success:
170 012E F8 CLC
1 171 012F C3 RET 00000h
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 4
boot.ASM
instinct - bootloader 0.0.3
172
173 0130 @@failure:
174 0130 F9 STC
1 175 0131 C3 RET 00000h
176 0132 ENDP resetDisk
177
178
179 0132 PROC chainLoad NEAR @@Cluster:WORD, @@StartSeg:WORD
1 180 0132 C8 0000 00 ENTERW 00000h,0
1 181 0136 06 PUSH ES
182 0137 8B 46 04 MOV AX, [@@Cluster]
183
184 013A @@chlstart:
185 013A 05 001F ADD AX, 31d
186 CALL readSects, AX, 0001h, [@@StartSeg]
1 187 013D FF 76 06 PUSH [@@STARTSEG]
1 188 0140 6A 01 PUSH 0001H
1 189 0142 50 PUSH AX
1 190 0143 E8 FF80 CALL READSECTS
1 191 0146 83 C4 06 ADD SP,00006h
192 0149 72 2E JC @@failure
193 014B 83 46 06 20 ADD [@@StartSeg], 20h
194
195 014F B8 2000 MOV AX, 2000h ; FAT
196 0152 8E C0 MOV ES, AX
197 0154 8B 76 04 MOV SI, [@@Cluster]
198 0157 D1 E6 SHL SI, 01d ; si=si*2
199 0159 03 76 04 ADD SI, [@@Cluster] ; si=si+cluster (si=si*3)
200 015C D1 EE SHR SI, 01d ; si=si/2 (si=si*1.5)
201 015E 26: 8B 04 MOV AX, [ES:SI]
202 0161 73 05 JNC @@L01
203
204 0163 C1 E8 04 SHR AX, 04d
205 0166 EB 03 JMP @@L02
206 0168 @@L01:
207 0168 25 0FFF AND AX, 0FFFh
208 016B @@L02:
209 016B 3D 0FF8 CMP AX, 0FF8h
210 016E 73 05 JAE @@success
211 0170 89 46 04 MOV [@@Cluster], AX
212 0173 EB C5 JMP @@chlstart
213
214 0175 @@success:
215 0175 07 POP ES
216 0176 F8 CLC
1 217 0177 C9 LEAVEW
1 218 0178 C3 RET 00000h
219
220 0179 @@failure:
221 0179 07 POP ES
222 017A F9 STC
1 223 017B C9 LEAVEW
1 224 017C C3 RET 00000h
225 017D ENDP chainLoad
226
227 017D PROC findFile NEAR @@FilePointer:WORD, @@StartSeg
1 228 017D C8 0000 00 ENTERW 00000h,0
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 5
boot.ASM
instinct - bootloader 0.0.3
1 229 0181 06 PUSH ES
230 0182 8B 46 06 MOV AX, [@@StartSeg]
231 0185 8E C0 MOV ES, AX
232 0187 33 D2 XOR DX, DX
233
234 0189 @@ffloop1:
235 0189 8B 76 04 MOV SI, [@@FilePointer]
236 018C 8B FA MOV DI, DX
237 018E B9 000B MOV CX, 11
238 0191 FC CLD
239 0192 F3> A6 REPE CMPSB
240 0194 74 0B JE @@getCluster
241 0196 83 C2 20 ADD DX, 32d
242 0199 81 FA 1C00 CMP DX, 1C00h
243 019D 73 0E JAE @@failure
244 019F EB E8 JMP @@ffloop1
245
246 01A1 @@getcluster:
247 01A1 83 C2 1A ADD DX, 26d
248 01A4 8B FA MOV DI, DX
249 01A6 26: 8B 05 MOV AX, [ES:DI]
250
251 01A9 @@success:
252 01A9 07 POP ES
253 01AA F8 CLC
1 254 01AB C9 LEAVEW
1 255 01AC C3 RET 00000h
256
257 01AD @@failure:
258 01AD 07 POP ES
259 01AE F9 STC
1 260 01AF C9 LEAVEW
1 261 01B0 C3 RET 00000h
262 01B1 ENDP findFile
263
264
265 ORG 510d
266 01FE AA55 wSysDskSgn DW 0AA55h
267
268 0200 ?? bCYL DB ?
269 0201 ?? bHEAD DB ?
270 0202 ?? bSECT DB ?
271
272 END start
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 6
Symbol Table
instinct - bootloader 0.0.3
Symbol Name Type Value
??DATE Text "11/01/02"
??FILENAME Text "boot "
??TIME Text "01:22:59"
??VERSION Number 040A
@32BIT Text 0
@@ADDRESS Number [DGROUP:BP+0004]
@@ATTEMPT Number [DGROUP:BP-0002]
@@CHLSTART Near _TEXT:013A
@@CLUSTER Number [DGROUP:BP+0004]
@@FAILURE Near _TEXT:011F
@@FAILURE Near _TEXT:0130
@@FAILURE Near _TEXT:0179
@@FAILURE Near _TEXT:01AD
@@FFLOOP1 Near _TEXT:0189
@@FILEPOINTER Number [DGROUP:BP+0004]
@@GETCLUSTER Near _TEXT:01A1
@@L01 Near _TEXT:010F
@@L01 Near _TEXT:0168
@@L02 Near _TEXT:016B
@@LOADSEG Number [DGROUP:BP+0008]
@@SECTCOUNT Number [DGROUP:BP+0006]
@@SECTLOOP Near _TEXT:00CF
@@SECTSTART Number [DGROUP:BP+0004]
@@STARTSEG Number [DGROUP:BP+0006]
@@STARTSEG Number [DGROUP:BP+0006]
@@SUCCESS Near _TEXT:011B
@@SUCCESS Near _TEXT:012E
@@SUCCESS Near _TEXT:0175
@@SUCCESS Near _TEXT:01A9
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0F0FH
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text BOOT
@INTERFACE Text 001H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 4
BCYL Byte _TEXT:0200
BDISKLABEL Byte _TEXT:002B
BDRIVNUMBR Byte _TEXT:0024
BDSKFILSYS Byte _TEXT:0036
BEXBPBSIGN Byte _TEXT:0026
BFATTABLES Byte _TEXT:0010
BFILENAME Byte _TEXT:003E
BHEAD Byte _TEXT:0201
BMEDIATYPW Byte _TEXT:0015
BNTDRTYFLG Byte _TEXT:0025
BOSOEMNAME Byte _TEXT:0003
BSECPCLUST Byte _TEXT:000D
BSECT Byte _TEXT:0202
CHAINLOAD Near _TEXT:0132
Turbo Assembler Version 4.1 11/01/02 01:23:01 Page 7
Symbol Table
instinct - bootloader 0.0.3
DDSKSERIAL Dword _TEXT:0027
DHIDNSECTS Dword _TEXT:001C
DLGSECTORS Dword _TEXT:0020
FAIL Near _TEXT:0095
FINDFILE Near _TEXT:017D
GETCHS Near _TEXT:00A0
L01 Near _TEXT:004E
MAIN Near _TEXT:0049
READSECTS Near _TEXT:00C6
RESETDISK Near _TEXT:0123
START Near _TEXT:0000
WBYPSECTOR Word _TEXT:000B
WDRIVHEADS Word _TEXT:001A
WFATSECTOR Word _TEXT:0016
WROOTENTRS Word _TEXT:0011
WRSVDSECTS Word _TEXT:000E
WSECTSPTRK Word _TEXT:0018
WSMSECTORS Word _TEXT:0013
WSYSDSKSGN Word _TEXT:01FE
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0400 Para Stack STACK
_DATA 16 0000 Word Public DATA
_TEXT 16 0203 Word Public CODE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -