⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot.lst

📁 一个微型操作系统源码
💻 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 + -