     1                                  ; ****************************************************************************
     2                                  ; mbrestor.s (MBRESTOR.COM) - TRDOS 386 Harddisk MBR Restore Utility
     3                                  ; 						   (for MSDOS/WINDOWS)
     4                                  ; ****************************************************************************
     5                                  ; Last Update: 11/10/2020
     6                                  ; ----------------------------------------------------------------------------
     7                                  ; Beginning: 10/10/2020
     8                                  ; ----------------------------------------------------------------------------
     9                                  ; Assembler: NASM version 2.15
    10                                  ; ----------------------------------------------------------------------------
    11                                  ; Turkish Rational DOS
    12                                  ; Operating System Project v2.0 by ERDOGAN TAN (Beginning: 04/01/2016)
    13                                  ; ----------------------------------------------------------------------------
    14                                  ; Purpose: 
    15                                  ;	To restore masterboot sector (MBR) from a file after a modification.
    16                                  ;	(MBSAVE.COM is used to save masterboot sector before using MBRESTOR)
    17                                  ; ****************************************************************************
    18                                  ; nasm mbrestor.s -l mbrestor.lst -o MBRESTOR.COM
    19                                  ; ----------------------------------------------------------------------------
    20                                  ; Derived from: mbsave.s & bsrestor.s by Erdogan Tan, 10/10/2020
    21                                  
    22                                  ; DTA (PSP+80h= Offset 128)
    23                                  DTA_Attrib equ 149 ; PDP+21
    24                                  DTA_Time equ 150 ; PSP+22
    25                                  DTA_Date equ 152 ; PSP 24
    26                                  DTA_FileSize equ 154 ; PSP + 26
    27                                  DTA_FileName equ 158 ; PSP + 30
    28                                  
    29                                  ; Masterboot / Partition Table at Beginning+1BEh
    30                                  ptBootable      equ 0
    31                                  ptBeginHead     equ 1
    32                                  ptBeginSector   equ 2
    33                                  ptBeginCylinder equ 3
    34                                  ptFileSystemID	equ 4
    35                                  ptEndHead       equ 5
    36                                  ptEndSector     equ 6
    37                                  ptEndCylinder   equ 7
    38                                  ptStartSector   equ 8
    39                                  ptSectors       equ 12
    40                                  
    41                                  ; BIOS INT 13h Extensions (LBA extensions)
    42                                  ; Just After DP Data (DPDiskNumber+)
    43                                  DAP_PacketSize equ 10h  ; If extensions present, this byte will be >=10h
    44                                  DAP_Reserved1 equ 11h   ; Reserved Byte 
    45                                  DAP_NumOfBlocks equ 12h ; Value of this byte must be 0 to 127
    46                                  DAP_Reserved2 equ 13h   ; Reserved Byte
    47                                  DAP_Destination equ 14h ; Address of Transfer Buffer as SEGMENT:OFFSET
    48                                  DAP_LBA_Address equ 18h ; LBA=(C1*H0+H1)*S0+S1-1
    49                                                          ; C1= Selected Cylinder Number
    50                                                          ; H0= Number Of Heads (Maximum Head Number + 1)
    51                                                          ; H1= Selected Head Number
    52                                                          ; S0= Maximum Sector Number
    53                                                          ; S1= Selected Sector Number
    54                                                          ; QUAD WORD
    55                                  ; DAP_Flat_Destination equ 20h ; 64 bit address, if value in 4h is FFFF:FFFFh
    56                                                               ; QUAD WORD (Also, value in 0h must be 18h) 
    57                                                               ; TR-DOS will not use 64 bit Flat Address
    58                                  
    59                                  pTableOffset equ 1BEh ; 446
    60                                  
    61                                  
    62                                  ; Known partition types
    63                                  
    64                                  ;FileSys_Names: ; 2003-2017
    65                                  ;; (Valid FileSystems for TRDOS 386, SINGLIX, RETRO UNIX OS projects in 2017)
    66                                  FS_FAT12	equ 1		; 01h = FAT12
    67                                  FS_XENIX	equ 2		; 02h , XENIX System V root
    68                                  FS_XENIX_USR	equ 3		; 03h , XENIX System V user
    69                                  FS_FAT16	equ 4		; 04h = FAT16 < 32MB
    70                                  FS_EXT_CHS	equ 5		; 05h = Extended DOS Partition
    71                                  FS_FAT16_BIG	equ 6		; 06h = FAT16 > 32MB, CHS mode
    72                                  FS_NTFS		equ 7		; 07h , WINDOWS NTFS Partition
    73                                  FS_FAT32_CHS	equ 11		; 0Bh = FAT32, CHS mode
    74                                  FS_FAT32_LBA	equ 12		; 0Ch = FAT32, LBA mode
    75                                  FS_FAT16_LBA	equ 14		; 0Eh = FAT16, LBA mode
    76                                  FS_EXT_LBA	equ 15		; 0Fh = Extented Partition, LBA mode
    77                                  FS_UNIX_SYSV	equ 99		; 63h , SCO UNIX, UNIXWARE, OPENSERVER
    78                                  FS_RETROUNIX	equ 113		; 71h , Retro UNIX 386 v2 Partition
    79                                  FS_UNIX_V7	equ 114		; 72h , UNIX v7 x86 Partition  
    80                                  FS_LINUXSWAP	equ 139		; 82h , LINUX SWAP Partition
    81                                  FS_LINUX	equ 131		; 83h , LINUX NATIVE (ext2) Partition
    82                                  FS_LINUXEXT	equ 133		; 85h , LINUX EXTENDED Partition
    83                                  FS_TRDD		equ 160		; A0h , (Random Data Disk) LBA
    84                                  FS_TRFS		equ 161		; A1h , (32 bit, 512 bytes per sector)
    85                                   
    86                                  [BITS 16]
    87                                  [ORG 100h]
    88                                  
    89                                  	;;cli
    90                                  	;;cld
    91                                  	;;push	cs
    92                                  	;;pop	ss
    93                                  	;;mov	sp, 0FFFEh
    94                                  	;;sti
    95                                  	;
    96                                  	;;mov	bx, SizeOfFile+100
    97                                  	;
    98                                  	;mov	bx, bss_end
    99                                  	;
   100                                          ;add	bx, 15
   101                                          ;shr	bx, 1
   102                                          ;shr	bx, 1
   103                                  	;shr	bx, 1
   104                                  	;shr	bx, 1
   105                                          ;mov	ah, 4Ah ; modify memory allocation
   106                                          ;;push	cs
   107                                          ;;pop	es
   108                                          ;int	21h
   109                                  
   110                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   111                                  ; clear BSS
   112                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   113                                  
   114                                  	;mov	cx, bss_clear_end
   115                                  	;
   116                                  	;mov	di, bss_start
   117                                  	;sub	cx, di
   118                                  	;;inc	cx
   119                                  	;shr	cx, 1
   120                                  	;xor	ax, ax
   121                                  	;rep	stosw 
   122                                  
   123                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   124                                  ; get command arguments (command tail)
   125                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   126                                  
   127 00000000 BE8000                  	mov	si, 80h			; PSP command tail
   128 00000003 AC                       	lodsb
   129 00000004 08C0                    	or	al, al 			; command tail length                            
   130 00000006 7449                    	jz	short _06		; jump if zero
   131                                  _01:
   132 00000008 AC                      	lodsb
   133 00000009 3C20                    	cmp	al, ' '			; is it SPACE ?
   134 0000000B 74FB                    	je	short _01 		
   135 0000000D 7242                    	jb	short _06
   136                                  
   137 0000000F C606[220E]61            	mov	byte [option], 'a' ; reset to all (code and pt)
   138                                  
   139                                  	; check option character ("-")
   140 00000014 3C2D                    	cmp	al, '-'
   141 00000016 751F                    	jne	short _04
   142                                  
   143 00000018 AC                      	lodsb
   144 00000019 C606[220E]63            	mov	byte [option], 'c' ; set to code
   145 0000001E 3C63                    	cmp	al, 'c'
   146 00000020 7409                    	je	short _02
   147 00000022 3C74                    	cmp	al, 't'
   148 00000024 752B                    	jne	short _06
   149 00000026 C606[220E]74            	mov	byte [option], 't'  ; set to partition table
   150                                  _02:
   151 0000002B 803C20                  	cmp	byte [si], ' '  ; space
   152 0000002E 7521                    	jne	short _06
   153                                  _03:
   154 00000030 AC                      	lodsb
   155 00000031 3C20                    	cmp	al, 20h ; space	
   156 00000033 74FB                    	je	short _03
   157 00000035 721A                    	jb	short _06
   158                                  _04:
   159                                  	; check disk name
   160                                  
   161 00000037 3C68                    	cmp	al, 'h'
   162 00000039 7516                    	jne	short _06	
   163 0000003B 803C64                  	cmp	byte [si], 'd'
   164 0000003E 7511                    	jne	short _06
   165 00000040 46                      	inc	si
   166 00000041 AC                      	lodsb
   167 00000042 3C30                    	cmp	al, '0'
   168 00000044 7406                    	je	short _05
   169 00000046 7209                    	jb	short _06
   170 00000048 3C33                    	cmp	al, '3'
   171 0000004A 7705                    	ja	short _06
   172                                  _05:
   173 0000004C 803C20                  	cmp	byte [si], ' '
   174 0000004F 7406                    	je	short _07
   175                                  _06:
   176 00000051 BE[6203]                	mov	si, TrDOS_Welcome
   177 00000054 E93202                  	jmp	_52
   178                                  _07:
   179 00000057 46                      	inc	si
   180 00000058 0450                    	add	al, 80h - '0'
   181 0000005A A2[6003]                	mov	[DrvNum], al	; 80h .. 83h
   182                                  _08:
   183 0000005D AC                      	lodsb
   184 0000005E 3C20                    	cmp	al, ' '
   185 00000060 74FB                    	je	short _08
   186 00000062 72ED                    	jb	short _06
   187                                  
   188                                  	; check backup file name
   189                                  _09:
   190 00000064 BF[1408]                       	mov	di, mbr_file_name
   191 00000067 AA                      	stosb
   192                                  _10:
   193 00000068 AC                      	lodsb
   194                                  	;cmp	al, 0Dh ; ENTER (CR) key
   195 00000069 3C20                    	cmp	al, 20h ; ' '
   196 0000006B 760C                    	jna	short _11
   197 0000006D AA                      	stosb
   198 0000006E 81FF[2008]              	cmp	di, mbr_file_name + 12
   199 00000072 72F4                    	jb	short _10
   200 00000074 803C20                  	cmp	byte [si], 20h 
   201 00000077 7742                    	ja	short _17
   202                                  _11:
   203 00000079 28C0                    	sub	al, al
   204 0000007B AA                      	stosb
   205                                  
   206                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   207                                  ; File name capitalization
   208                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   209                                  
   210 0000007C BE[1408]                	mov	si, mbr_file_name
   211 0000007F 89F7                    	mov	di, si
   212 00000081 89F3                    	mov	bx, si
   213                                  _12:
   214 00000083 AC                      	lodsb
   215 00000084 3C61                    	cmp	al, 'a'
   216 00000086 730D                    	jnb	short _14
   217 00000088 20C0                    	and	al, al
   218 0000008A 7412                    	jz	short _15
   219 0000008C 3C2E                    	cmp	al, '.'
   220 0000008E 7502                    	jne	short _13
   221 00000090 89FB                    	mov	bx, di ; dot position	
   222                                  _13:
   223 00000092 AA                      	stosb
   224 00000093 EBEE                    	jmp	short _12 		
   225                                  _14:
   226 00000095 3C7A                    	cmp	al, 'z'
   227 00000097 77F9                    	ja	short _13
   228 00000099 24DF                    	and	al, 0DFh ; NOT 32
   229 0000009B AA                      	stosb
   230 0000009C EBE5                    	jmp	short _12	
   231                                  _15:
   232 0000009E 8805                    	mov	[di], al
   233 000000A0 4F                      	dec	di
   234 000000A1 39FB                    	cmp	bx, di
   235 000000A3 7316                    	jnb	short _17
   236 000000A5 29DF                    	sub	di, bx
   237 000000A7 81EB[1408]              	sub	bx, mbr_file_name
   238 000000AB 83FF03                  	cmp	di, 3
   239 000000AE 7606                    	jna	short _16
   240 000000B0 21DB                    	and	bx, bx
   241 000000B2 7507                    	jnz	short _17
   242 000000B4 EB0B                    	jmp	short _18		
   243                                  _16:
   244 000000B6 83FB08                  	cmp	bx, 8
   245 000000B9 7606                    	jna	short _18
   246                                  _17:
   247 000000BB BE[3C05]                	mov	si, msg_inv_file_name
   248 000000BE E9C801                  	jmp	_52
   249                                  
   250                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   251                                  ; Find masterboot record/sector (MBR) backup file
   252                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   253                                  	
   254                                  _18:
   255 000000C1 BA[1408]                	mov	dx, mbr_file_name
   256 000000C4 B93F00                  	mov	cx, 3Fh ; File Attributes
   257 000000C7 B44E                    	mov	ah, 4Eh ; MS-DOS Function = Find First File
   258 000000C9 CD21                    	int	21h
   259 000000CB 7306                    	jnc	short _19
   260                                  
   261                                  	; mbr backup file not found in working/current directory
   262 000000CD BE[2D06]                	mov	si, msg_file_notfound
   263 000000D0 E9B601                  	jmp	_52
   264                                  
   265                                  _19:
   266                                  
   267                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   268                                  ; Check mbr backup file features
   269                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   270                                  
   271 000000D3 BE9500                  	mov	si, DTA_Attrib
   272 000000D6 8A04                    	mov	al, [si]
   273                                  	;and	al, 1Fh ; directory, volume label, system, hidden, read only
   274 000000D8 241E                    	and	al, 1Eh ; directory, volume label, system, hidden
   275 000000DA 75DF                    	jnz	short _17     
   276 000000DC BE9A00                  	mov	si, DTA_FileSize
   277 000000DF AD                      	lodsw
   278 000000E0 8B14                    	mov	dx, [si]
   279 000000E2 09C0                    	or	ax, ax 
   280 000000E4 7413                    	jz	short _20 ; zero file size (invalid backup file)
   281                                  
   282 000000E6 21D2                    	and	dx, dx	
   283 000000E8 750F                    	jnz	short _20 ; wrong file size (>1536 bytes)
   284                                  
   285 000000EA 3D0002                  	cmp	ax, 512	  ; MBSAVE.COM	
   286 000000ED 7410                    	je	short _21 ; correct file size (for masterboot sector)
   287                                  
   288 000000EF 3D0004                  	cmp	ax, 1024  ; BSSAVE.COM
   289 000000F2 740B                    	je	short _21 ; correct file size (for MBR + FAT boot sector)
   290                                  
   291 000000F4 3D0006                  	cmp	ax, 1536  ; BSSAVE.COM
   292 000000F7 7406                    	je	short _21 ; correct file size (for MBR + FAT32 boot sectors)	
   293                                  
   294                                  	; invalid backup file !
   295                                  _20:
   296 000000F9 BE[A206]                	mov	si, msg_inv_backup_file
   297 000000FC E98A01                  	jmp	_52	
   298                                  
   299                                  _21:
   300                                  
   301                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   302                                  ; Read masterboot sector (MBR)
   303                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   304                                  
   305 000000FF BF0500                  	mov	di, 5
   306                                  
   307                                  	;mov	ax, 0201h		; read disk
   308 00000102 BB[220A]                	mov	bx, MasterBootBuff	; location of masterboot code
   309                                  
   310 00000105 B90100                  	mov	cx, 1			; cylinder = 0
   311                                  					; sector = 1
   312 00000108 B600                    	mov	dh, 0			; head = 0
   313 0000010A 8A16[6003]              	mov	dl, [DrvNum]		; drive number, 80h .. 83h
   314                                  _22:
   315 0000010E B80102                  	mov	ax, 0201h
   316 00000111 CD13                    	int	13h
   317 00000113 730D                    	jnc	short _23		; read masterboot sector, OK
   318                                  	
   319                                   	; reset hard disk(s)
   320 00000115 30E4                    	xor	ah, ah
   321                                  	;mov	dl, [drv]
   322 00000117 CD13                    	int	13h
   323                                  
   324                                  	;dec	byte [RetryCount]
   325 00000119 4F                      	dec	di
   326 0000011A 75F2                    	jnz	short _22
   327                                  
   328                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   329                                  ; write disk error message and terminate
   330                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   331                                  
   332 0000011C BE[6206]                	mov	si, msg_disk_not_ready_error
   333 0000011F E96701                  	jmp	_52
   334                                  
   335                                  _23:
   336                                  
   337                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   338                                  ; Check MBR if it is valid and it contains a known partition
   339                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   340                                  
   341 00000122 813E[200C]55AA          	cmp 	word [MBIDCode], 0AA55h
   342 00000128 750E                    	jne	short _25 ; invalid MBR	
   343                                  
   344                                  	; check if MBR contains a known type of partition or not
   345                                  	; (also check bootable partition indicator for 0 or 80h)
   346                                  
   347 0000012A BE[E00B]                	mov	si, MasterBootBuff+pTableOffset
   348                                  _24:
   349 0000012D BB[4C03]                	mov	bx, known_partitions
   350 00000130 B91300                  	mov	cx, kpc-known_partitions
   351                                  
   352 00000133 F6047F                  	test	byte [si], 7Fh
   353 00000136 7407                    	jz	short _26  ; valid indicator
   354                                  _25:
   355                                  	; invalid MBR ! MBR code and PT must be restored from file
   356                                  	; (also if the PT does not contain a known partition type)
   357 00000138 C606[220E]65            	mov	byte [option], 'e'
   358 0000013D EB1C                    	jmp	short _29
   359                                  _26:
   360 0000013F 8A4404                  	mov	al, [si+ptFileSystemID]
   361 00000142 08C0                    	or	al, al
   362 00000144 740A                    	jz	short _28
   363                                  _27:	
   364 00000146 3A07                    	cmp	al, [bx]
   365 00000148 7411                    	je	short _29
   366 0000014A 49                      	dec	cx
   367 0000014B 7403                    	jz	short _28
   368 0000014D 43                      	inc	bx
   369 0000014E EBF6                    	jmp	short _27
   370                                  _28:
   371 00000150 81FE[200C]              	cmp	si, MasterBootBuff+pTableOffset+64
   372 00000154 73E2                    	jnb	short _25
   373 00000156 83C610                  	add	si, 16
   374 00000159 EBD2                    	jmp	short _24
   375                                  _29:
   376                                  
   377                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   378                                  ; save the disk's MBR if it's partition table is valid
   379                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   380                                  
   381 0000015B 803E[220E]65            	cmp	byte [option], 'e'  ; invalid partition table ?
   382 00000160 740B                    	je	short _30	    ; yes (full restore is needed)			
   383                                  
   384 00000162 BE[220A]                	mov	si, MasterBootBuff  ; R/W Buffer 
   385 00000165 BF[2208]                	mov	di, MBR ; Backup
   386 00000168 B90001                  	mov	cx, 256 
   387 0000016B F3A5                    	rep	movsw
   388                                  _30:
   389                                  
   390                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   391                                  ; read MBR in the backup file and check it
   392                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   393                                  
   394 0000016D B8003D                  	mov	ax, 3D00h ; open file for read
   395 00000170 BA[1408]                	mov	dx, mbr_file_name
   396 00000173 CD21                    	int	21h
   397 00000175 7214                    	jc	short _32
   398                                  _31:
   399                                  	;mov	[mbr_file_handle], ax
   400 00000177 89C3                    	mov	bx, ax
   401 00000179 B90002                  	mov	cx, 512 ; read masterboot sector (512 bytes)
   402                                  	;mov	ax, 3F00h ; read from file
   403 0000017C B43F                    	mov	ah, 3Fh
   404 0000017E BA[220A]                	mov	dx, MasterBootBuff 
   405 00000181 CD21                    	int	21h
   406                                  
   407 00000183 9C                      	pushf
   408 00000184 B43E                    	mov	ah, 3Eh ; close file
   409                                  	;mov	bx, [mbr_file_handle]
   410 00000186 CD21                    	int	21h
   411 00000188 9D                      	popf
   412 00000189 7306                    	jnc	short _33
   413                                  _32:
   414 0000018B BE[4906]                	mov	si, msg_file_read_error
   415 0000018E E9F800                  	jmp	_52
   416                                  _33:
   417                                  	; Check file's MBR
   418                                  	
   419 00000191 813E[200C]55AA          	cmp 	word [MBIDCode], 0AA55h
   420 00000197 7406                    	je	short _35 ; Valid MBR	
   421                                  _34:
   422                                  	; invalid MBR !
   423 00000199 BE[ED06]                	mov	si, msg_inv_file_mbr
   424 0000019C E9EA00                  	jmp	_52
   425                                  _35:
   426                                  	; check if MBR contains a known type of partition or not
   427                                  	; (also check bootable partition indicator for 0 or 80h)
   428                                  
   429 0000019F BE[E00B]                	mov	si, MasterBootBuff+pTableOffset
   430                                  _36:
   431 000001A2 BB[4C03]                	mov	bx, known_partitions
   432 000001A5 B91300                  	mov	cx, kpc-known_partitions
   433                                  
   434 000001A8 F6047F                  	test	byte [si], 7Fh
   435 000001AB 7406                    	jz	short _38  ; valid indicator
   436                                  _37:
   437                                  	; invalid MBR 
   438                                  	; (MBR does not contain a known partition type)
   439 000001AD BE[7E05]                	mov	si, msg_kp_notfound
   440 000001B0 E9D600                  	jmp	_52
   441                                  _38:
   442 000001B3 8A4404                  	mov	al, [si+ptFileSystemID]
   443 000001B6 08C0                    	or	al, al
   444 000001B8 740A                    	jz	short _40
   445                                  _39:	
   446 000001BA 3A07                    	cmp	al, [bx]
   447 000001BC 7411                    	je	short _41
   448 000001BE 49                      	dec	cx
   449 000001BF 7403                    	jz	short _40
   450 000001C1 43                      	inc	bx
   451 000001C2 EBF6                    	jmp	short _39
   452                                  _40:
   453 000001C4 81FE[200C]              	cmp	si, MasterBootBuff+pTableOffset+64
   454 000001C8 73E3                    	jnb	short _37
   455 000001CA 83C610                  	add	si, 16
   456 000001CD EBD3                    	jmp	short _36
   457                                  _41:
   458                                  
   459                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   460                                  ; check (present) active partition's boot sector
   461                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   462                                  
   463 000001CF 803E[220E]63            	cmp	byte [option], 'c' ; MBR code only
   464 000001D4 7429                    	je	short _43	; MBR code will be overwritten
   465                                  
   466 000001D6 803E[220E]65            	cmp	byte [option], 'e' 
   467                                  				; Invalid MBR, will be overwritten
   468 000001DB 7422                    	je	short _43
   469                                  
   470 000001DD BE[E009]                	mov	si, MBR+pTableOffset
   471 000001E0 E8EC00                  	call	check_active_p_bs
   472 000001E3 7205                    	jc	short _42
   473                                  
   474 000001E5 C606[6103]01            	mov	byte [oldpbs], 1
   475                                  _42:
   476                                  
   477                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   478                                  ; verify boot sector of the active partition (or dos partition)
   479                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   480                                  
   481 000001EA BE[E00B]                	mov	si, MasterBootBuff+pTableOffset
   482 000001ED E8DF00                  	call	check_active_p_bs
   483 000001F0 730D                    	jnc	short _43
   484                                  
   485 000001F2 803E[6103]01            	cmp	byte [oldpbs], 1
   486 000001F7 7206                    	jb	short _43	
   487                                  
   488 000001F9 BE[1807]                	mov	si, msg_file_pbsv_error
   489 000001FC E98A00                  	jmp	_52
   490                                  _43:
   491                                  
   492                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   493                                  ; MBR overwrite question
   494                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   495                                  	
   496 000001FF BE[CA05]                	mov	si, msg_overwrite_question
   497 00000202 E8BC00                  	call	print_msg
   498                                  _44:
   499 00000205 31C0                    	xor	ax, ax
   500 00000207 CD16                    	int	16h			; wait for keyboard command
   501 00000209 3C79                    	cmp	al, 'y'
   502 0000020B 7419                    	je	short _46		; retry
   503 0000020D 3C59                    	cmp	al, 'Y'
   504 0000020F 7415                    	je	short _46
   505 00000211 3C6E                    	cmp	al, 'n'
   506 00000213 740C                    	je	short _45 		; exit
   507 00000215 3C4E                    	cmp	al, 'N'
   508 00000217 7408                    	je	short _45
   509 00000219 3C03                    	cmp	al, 'C'-40h
   510 0000021B 7464                    	je	short _50             
   511 0000021D 3C1B                    	cmp	al, 27
   512 0000021F 7568                    	jne	short _52
   513                                  _45:
   514 00000221 BE[0006]                	mov	si, _NO
   515 00000224 EB63                    	jmp	short _52
   516                                  _46:
   517 00000226 BE[FA05]                	mov	si, _YES
   518 00000229 E89500                  	call	print_msg
   519                                  
   520 0000022C BE[0506]                	mov	si, msg_writing_mbr
   521 0000022F E88F00                  	call	print_msg
   522                                  
   523                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   524                                  ; set masterboot buffer according to the selected option
   525                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   526                                  
   527 00000232 A0[220E]                	mov	al, [option]
   528                                  
   529 00000235 3C61                    	cmp	al, 'a'
   530 00000237 7420                    	je	short _48
   531                                  
   532 00000239 3C65                    	cmp	al, 'e'
   533 0000023B 741C                    	je	short _48
   534                                  
   535 0000023D 3C63                    	cmp	al, 'c'
   536 0000023F 750D                    	jne	short _47
   537                                  
   538                                  	; [option] = 'c' ; restore MBR (bs loader) code only
   539                                  	; (old partition table will not be overwritten)
   540 00000241 BE[E009]                	mov	si, MBR+pTableOffset
   541 00000244 BF[E00B]                	mov	di, MasterBootBuff+pTableOffset
   542 00000247 B92000                  	mov	cx, 32
   543 0000024A F3A5                    	rep	movsw
   544                                  	;;mov	word [MasterBootBuff+510], 0AA55h
   545 0000024C EB0B                    	jmp	short _48
   546                                  _47:
   547                                  	; [option] = 't' ; restore partition table only
   548                                  	; (old MBR code will not be overwritten)
   549 0000024E BE[2208]                	mov	si, MBR
   550 00000251 BF[220A]                	mov	di, MasterBootBuff
   551 00000254 B9BE01                  	mov	cx, pTableOffset ; 446
   552 00000257 F3A4                    	rep	movsb
   553                                  	;mov	word [MasterBootBuff+510], 0AA55h	
   554                                  _48:
   555                                  
   556                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   557                                  ; Write masterboot sector to disk
   558                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   559                                  
   560 00000259 BF0500                  	mov	di, 5
   561                                  
   562                                  	;mov	ax, 0301h		; write disk
   563 0000025C BB[220A]                	mov	bx, MasterBootBuff	; masterboot buffer
   564                                  
   565 0000025F B90100                  	mov	cx, 1			; cylinder = 0
   566                                  					; sector = 1
   567 00000262 B600                    	mov	dh, 0			; head = 0
   568 00000264 8A16[6003]              	mov	dl, [DrvNum]		; drive number, 80h .. 83h
   569                                  _49:
   570 00000268 B80103                  	mov	ax, 0301h
   571 0000026B CD13                    	int	13h
   572 0000026D 7317                    	jnc	short _51		; write masterboot sector, OK
   573                                  	
   574                                   	; reset hard disk(s)
   575 0000026F 30E4                    	xor	ah, ah
   576                                  	;mov	dl, [drv]
   577 00000271 CD13                    	int	13h
   578                                  
   579                                  	;dec	byte [RetryCount]
   580 00000273 4F                      	dec	di
   581 00000274 75F2                    	jnz	short _49
   582                                  
   583                                  	; disk write error
   584 00000276 BE[2A06]                	mov	si, CRLF
   585 00000279 E84500                  	call	print_msg
   586 0000027C BE[8B06]                	mov	si, msg_disk_write_error
   587 0000027F EB08                    	jmp	short _52
   588                                  _50:
   589                                  	; nothing to do !
   590 00000281 BE[2A06]                	mov	si, CRLF 
   591 00000284 EB03                    	jmp	short _52
   592                                  _51:
   593                                  	; disk (mbr) writing is OK.
   594 00000286 BE[2606]                	mov	si, msg_OK
   595                                  _52:
   596 00000289 E83500                  	call	print_msg	
   597                                  
   598                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   599                                  ; Exit
   600                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   601                                  
   602 0000028C B8004C                  	mov	ax, 4C00h		; terminate
   603 0000028F CD21                    	int	21h
   604                                  _53:
   605 00000291 EBFE                    	jmp	short _53
   606                                  
   607                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   608                                  ; LBA read (read one sector)
   609                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   610                                  
   611                                  ;lba_read:
   612                                  ;	mov	[rw], 42h
   613                                  ;	jmp	short lba_rw
   614                                  
   615                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   616                                  ; LBA write (write one sector)
   617                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   618                                  
   619                                  ;lba_write:
   620                                  ;	mov	byte [rw], 43h
   621                                  ;	jmp	short lba_rw
   622                                  
   623                                  lba_read:
   624                                  lba_rw:
   625 00000293 BF0500                  	mov	di, 5
   626                                  lba_rw_1:
   627                                  	;pusha				; db 60h
   628 00000296 60                      	db	60h
   629                                  	;push 	0                       ; db 6Ah, 00h
   630 00000297 6A00                    	db	6Ah, 0
   631                                  	;push	0                       ; db 6Ah, 00h
   632 00000299 6A00                    	db	6Ah, 0
   633 0000029B 52                      	push    dx
   634 0000029C 50                      	push    ax
   635 0000029D 06                      	push    es
   636 0000029E 53                      	push    bx
   637                                  	;push	1			; db 6Ah, 01h
   638 0000029F 6A01                    	db	6Ah, 01h                     
   639                                  	;push	10h                     ; db 6Ah, 10h
   640 000002A1 6A10                    	db	6Ah, 10h
   641                                  
   642 000002A3 89E6                    	mov     si, sp
   643 000002A5 8A16[6003]              	mov     dl, [DrvNum]
   644 000002A9 30C0                    	xor	al, al	; verify off (for LBA write)
   645                                  lba_rw_2:
   646                                  	;mov	ah, [rw] ; LBA read/write
   647                                  	;xor	al, al	; verify off
   648 000002AB B442                    	mov	ah, 42h ; LBA read
   649 000002AD CD13                    	int     13h
   650                                  
   651                                  	;mov	[error], ah
   652 000002AF 730D                    	jnc     short lba_rw_3
   653                                  
   654 000002B1 4F                      	dec	di                 
   655 000002B2 740A                    	jz	short lba_rw_3 
   656                                          
   657 000002B4 30E4                    	xor	ah, ah                   
   658                                  	;mov	dl, [DrvNum]
   659 000002B6 CD13                    	int	13h	; BIOS Service func (ah) = 0
   660                                  			; Reset disk system
   661                                  
   662                                  	;mov	word [si+2], 1 ; set r/w count to 1 again
   663 000002B8 C6440201                	mov	byte [si+2], 1
   664                                  
   665 000002BC EBED                    	jmp	short lba_rw_2
   666                                  
   667                                  lba_rw_3:
   668                                  	;popa
   669 000002BE 61                      	db	61h
   670                                  	;popa
   671 000002BF 61                      	db	61h
   672                                  
   673                                  _retn:
   674 000002C0 C3                      	retn
   675                                  
   676                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   677                                  ; print message
   678                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   679                                  
   680                                  print_msg:
   681 000002C1 AC                      	lodsb				; Load byte at DS:SI to AL
   682 000002C2 20C0                    	and	al, al            
   683 000002C4 74FA                    	jz	short _retn      
   684 000002C6 B40E                    	mov	ah, 0Eh			
   685 000002C8 BB0700                  	mov	bx, 07h             
   686 000002CB CD10                    	int	10h			; BIOS Service func ( ah ) = 0Eh
   687                                  					; Write char as TTY
   688                                  					; AL-char BH-page BL-color
   689 000002CD EBF2                    	jmp     short print_msg
   690                                  
   691                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   692                                  ; check active partition's (or primary dos partition's) bs
   693                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
   694                                  
   695                                  check_active_p_bs:
   696                                  	; si = partition table address
   697 000002CF 89F5                    	mov	bp, si
   698 000002D1 83C530                  	add	bp, 48
   699                                  chk_a_pbs_next:
   700 000002D4 8A4404                  	mov	al, [si+ptFileSystemID]
   701                                  
   702 000002D7 C606[230E]26            	mov	byte [bootsig], 38 ; FAT 16 & FAT 12
   703                                  
   704 000002DC 3C06                    	cmp	al, 06h
   705 000002DE 7433                    	je	short read_start_sector ; FAT 16 CHS (big)
   706 000002E0 3C01                    	cmp	al, 01h
   707 000002E2 742F                    	je	short read_start_sector ; FAT 12 CHS (or LBA)
   708 000002E4 3C04                    	cmp	al, 04h
   709 000002E6 742B                    	je	short read_start_sector ; FAT 16 CHS
   710 000002E8 3C0E                    	cmp	al, 0Eh
   711 000002EA 7427                    	je	short read_start_sector ; FAT 16 LBA (windows)
   712                                  
   713 000002EC C606[230E]42            	mov	byte [bootsig], 66 ; FAT 32
   714                                  
   715 000002F1 3C0C                    	cmp	al, 0Ch
   716 000002F3 741E                    	je	short read_start_sector ; FAT 32 LBA
   717 000002F5 3C0B                    	cmp	al, 0Bh
   718 000002F7 741A                    	je	short read_start_sector ; FAT 32 CHS
   719                                  
   720 000002F9 C606[230E]00            	mov	byte [bootsig], 0 ; others
   721                                  
   722 000002FE 803C80                  	cmp	byte [si], 80h ; bootable (active) flag
   723 00000301 7410                           	je	short read_start_sector
   724                                  	
   725 00000303 3C05                    	cmp	al, 05h
   726 00000305 740C                    	je	short read_start_sector ; Extended DOS CHS
   727 00000307 3C0F                    	cmp	al, 0Fh
   728 00000309 7408                    	je	short read_start_sector ; Extended DOS (windows) LBA
   729                                  	
   730 0000030B 83C610                  	add	si, 16
   731 0000030E 39F5                    	cmp	bp, si
   732 00000310 73C2                    	jnb	short chk_a_pbs_next
   733                                  	
   734                                  	; cf = 1 
   735 00000312 C3                      	retn
   736                                  
   737                                  read_start_sector:
   738 00000313 8B4408                  	mov	ax, [si+ptStartSector]
   739 00000316 8B540A                  	mov	dx, [si+ptStartSector+2]
   740 00000319 BB[220C]                	mov	bx, BootSectorBuff
   741 0000031C E874FF                  	call	lba_read
   742 0000031F 722A                    	jc	short chk_a_pbs_retn
   743                                  
   744 00000321 813E[200E]55AA          	cmp	word [BootSectorBuff+510], 0AA55h
   745 00000327 7521                    	jne	short chk_a_pbs_stc
   746                                  
   747 00000329 A0[230E]                	mov	al, [bootsig]
   748 0000032C 08C0                    	or	al, al
   749 0000032E 741B                    	jz	short chk_a_pbs_retn ; not a FAT fs (valid boot sector)
   750 00000330 30E4                    	xor	ah, ah
   751 00000332 01C3                    	add	bx, ax ; BootSectorBuffer + BS_BootSig offset
   752                                  	
   753                                  	; must be
   754                                  	; same value of hidden sectors, same (extended boot) signature
   755                                  
   756 00000334 803F29                  	cmp	byte [bx], 29h ; Extd boot signature for FAT file systems
   757 00000337 7511                    	jne	short chk_a_pbs_stc
   758                                  
   759 00000339 A1[3E0C]                	mov	ax, [BootSectorBuff+28] ; Hidden sectors
   760 0000033C 8B16[400C]              	mov	dx, [BootSectorBuff+30]
   761 00000340 3B4408                  	cmp	ax, [si+ptStartSector]
   762 00000343 7505                    	jne	short chk_a_pbs_stc
   763 00000345 3B540A                  	cmp	dx, [si+ptStartSector+2]
   764 00000348 7401                    	je	short chk_a_pbs_retn
   765                                  		
   766                                  chk_a_pbs_stc:
   767 0000034A F9                      	stc	; not a valid boot sector
   768                                  
   769                                  chk_a_pbs_retn:
   770 0000034B C3                      	retn
   771                                  
   772                                  ;=============================================================================
   773                                  ;        	initialized data
   774                                  ;=============================================================================
   775                                  
   776                                  known_partitions:
   777 0000034C 0102030405              	      db FS_FAT12, FS_XENIX, FS_XENIX_USR, FS_FAT16, FS_EXT_CHS
   778 00000351 06070B0C                	      db FS_FAT16_BIG, FS_NTFS, FS_FAT32_CHS, FS_FAT32_LBA	
   779 00000355 0E0F6371                	      db FS_FAT16_LBA, FS_EXT_LBA, FS_UNIX_SYSV, FS_RETROUNIX 	
   780 00000359 728B8385                	      db FS_UNIX_V7, FS_LINUXSWAP, FS_LINUX, FS_LINUXEXT
   781 0000035D A0A1                    	      db FS_TRDD, FS_TRFS
   782                                  
   783 0000035F 00                      kpc:	db	0			
   784                                  
   785                                  ;rw:	db	42h	; LBA read (default)
   786                                   
   787                                  DrvNum:
   788 00000360 00                      	db	0
   789                                  
   790 00000361 00                      oldpbs: db	0
   791                                  
   792                                  ;align 2
   793                                  
   794                                  ;mbr_file_handle:
   795                                  ;	dw	0
   796                                  
   797                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   798                                  ;  Messages
   799                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   800                                  
   801                                  TrDOS_Welcome:
   802 00000362 0D0A                    	db	0Dh, 0Ah
   803 00000364 4D6173746572426F6F-     	db	"MasterBoot Record/Sector Restore Utility for TR-DOS 386"
   803 0000036D 74205265636F72642F-
   803 00000376 536563746F72205265-
   803 0000037F 73746F726520557469-
   803 00000388 6C69747920666F7220-
   803 00000391 54522D444F53203338-
   803 0000039A 36                 
   804 0000039B 0D0A                    	db	0Dh, 0Ah
   805 0000039D 76312E302E31313130-     	db	"v1.0.111020 (c) Erdogan TAN 2020"
   805 000003A6 323020286329204572-
   805 000003AF 646F67616E2054414E-
   805 000003B8 2032303230         
   806 000003BD 0D0A                    	db	0Dh, 0Ah
   807 000003BF 0D0A                    	db	0Dh, 0Ah
   808 000003C1 55736167653A20          	db	"Usage: "
   809 000003C8 0D0A                    	db	0Dh, 0Ah 
   810 000003CA 206D62726573746F72-     	db	" mbrestor [option] <hard disk name> <backup file name>"
   810 000003D3 205B6F7074696F6E5D-
   810 000003DC 203C68617264206469-
   810 000003E5 736B206E616D653E20-
   810 000003EE 3C6261636B75702066-
   810 000003F7 696C65206E616D653E 
   811 00000400 0D0A                    	db	0Dh, 0Ah
   812 00000402 0D0A                    	db	0Dh, 0Ah
   813 00000404 48617264206469736B-     	db	"Hard disk names: "
   813 0000040D 206E616D65733A20   
   814 00000415 0D0A                    	db	0Dh, 0Ah
   815 00000417 0D0A                    	db	0Dh, 0Ah
   816 00000419 20686430202E2E666F-     	db	" hd0 ..for MBR of 1st hard disk "
   816 00000422 72204D4252206F6620-
   816 0000042B 317374206861726420-
   816 00000434 6469736B20         
   817 00000439 0D0A                    	db	0Dh, 0Ah
   818 0000043B 20686431202E2E666F-     	db	" hd1 ..for MBR of 2nd hard disk "
   818 00000444 72204D4252206F6620-
   818 0000044D 326E64206861726420-
   818 00000456 6469736B20         
   819 0000045B 0D0A                    	db	0Dh, 0Ah
   820 0000045D 20686432202E2E666F-     	db	" hd2 ..for MBR of 3rd hard disk "
   820 00000466 72204D4252206F6620-
   820 0000046F 337264206861726420-
   820 00000478 6469736B20         
   821 0000047D 0D0A                    	db	0Dh, 0Ah
   822 0000047F 20686433202E2E666F-     	db	" hd3 ..for MBR of 4th hard disk "
   822 00000488 72204D4252206F6620-
   822 00000491 347468206861726420-
   822 0000049A 6469736B20         
   823 0000049F 0D0A0D0A                	db	0Dh, 0Ah, 0Dh, 0Ah
   824 000004A3 4F7074696F6E733A20      	db	"Options: "
   825 000004AC 0D0A                    	db	0Dh, 0Ah
   826 000004AE 202D63203A20726573-     	db	" -c : restore MBR code only "
   826 000004B7 746F7265204D425220-
   826 000004C0 636F6465206F6E6C79-
   826 000004C9 20                 
   827 000004CA 0D0A                    	db	0Dh, 0Ah
   828 000004CC 202D74203A20726573-     	db	" -t : restore partition table only "
   828 000004D5 746F72652070617274-
   828 000004DE 6974696F6E20746162-
   828 000004E7 6C65206F6E6C7920   
   829 000004EF 0D0A                    	db	0Dh, 0Ah
   830 000004F1 0D0A                    	db	0Dh, 0Ah
   831 000004F3 4578616D706C65733A      	db	"Examples:"
   832 000004FC 0D0A                    	db	0Dh, 0Ah
   833 000004FE 206D62726573746F72-     	db	" mbrestor -c hd0 mbsector.bin "
   833 00000507 202D6320686430206D-
   833 00000510 62736563746F722E62-
   833 00000519 696E20             
   834 0000051C 0D0A                    	db	0Dh, 0Ah
   835 0000051E 206D62726573746F72-     	db	" mbrestor hd1 mbsector.bin "
   835 00000527 20686431206D627365-
   835 00000530 63746F722E62696E20 
   836 00000539 0D0A00                  	db	0Dh, 0Ah, 0
   837                                  
   838                                  msg_inv_file_name: 
   839 0000053C 0D0A                    	db	0Dh, 0Ah
   840 0000053E 496E76616C69642066-     	db	"Invalid file name !", 0Dh, 0Ah
   840 00000547 696C65206E616D6520-
   840 00000550 210D0A             
   841 00000553 2846696C65206E616D-     	db	"(File name must fit to 8.3 DOS format) !"
   841 0000055C 65206D757374206669-
   841 00000565 7420746F20382E3320-
   841 0000056E 444F5320666F726D61-
   841 00000577 74292021           
   842 0000057B 0D0A00                  	db	0Dh, 0Ah, 0
   843                                  
   844                                  msg_kp_notfound:
   845 0000057E 0D0A                    	db	0Dh, 0Ah
   846 00000580 496E76616C69642062-     	db	"Invalid backup file !", 0Dh, 0Ah
   846 00000589 61636B75702066696C-
   846 00000592 6520210D0A         
   847 00000597 284D425220646F6573-     	db	'(MBR does not contain a known partition type) ! '	
   847 000005A0 206E6F7420636F6E74-
   847 000005A9 61696E2061206B6E6F-
   847 000005B2 776E20706172746974-
   847 000005BB 696F6E207479706529-
   847 000005C4 202120             
   848 000005C7 0D0A                    	db	0Dh, 0Ah
   849 000005C9 00                      	db	0
   850                                  
   851                                  msg_overwrite_question:
   852 000005CA 0D0A                    	db	0Dh, 0Ah
   853 000005CC 446F20796F75207761-     	db	"Do you want to overwrite masterboot sector ? "
   853 000005D5 6E7420746F206F7665-
   853 000005DE 727772697465206D61-
   853 000005E7 73746572626F6F7420-
   853 000005F0 736563746F72203F20 
   854 000005F9 00                      	db	0
   855                                  
   856 000005FA 594553                  _YES:	db	"YES"
   857 000005FD 0D0A00                  	db	0Dh, 0Ah, 0
   858                                  
   859 00000600 4E4F                    _NO:	db	"NO"
   860 00000602 0D0A00                  	db	0Dh, 0Ah, 0
   861                                  
   862                                  msg_writing_mbr:
   863 00000605 0D0A                    	db	0Dh, 0Ah
   864 00000607 57726974696E67206D-     	db	"Writing masterboot sector ... "
   864 00000610 6173746572626F6F74-
   864 00000619 20736563746F72202E-
   864 00000622 2E2E20             
   865 00000625 00                      	db	0
   866                                  msg_OK:
   867 00000626 204F4B2E                	db	' OK.'
   868                                  CRLF:
   869 0000062A 0D0A00                  	db	0Dh, 0Ah, 0
   870                                  
   871                                  msg_file_notfound:
   872 0000062D 0D0A                    	db	0Dh, 0Ah
   873 0000062F 4261636B7570206669-     	db	"Backup file not found !"
   873 00000638 6C65206E6F7420666F-
   873 00000641 756E642021         
   874 00000646 0D0A00                  	db	0Dh, 0Ah, 0
   875                                  
   876                                  msg_file_read_error:
   877 00000649 0D0A                    	db	0Dh, 0Ah
   878 0000064B 46696C652072656164-     	db	"File reading error !"
   878 00000654 696E67206572726F72-
   878 0000065D 2021               
   879 0000065F 0D0A00                  	db	0Dh, 0Ah, 0
   880                                  
   881                                  msg_disk_not_ready_error:
   882 00000662 0D0A                    	db	0Dh, 0Ah
   883 00000664 4469736B2072656164-     	db	"Disk read error or drive not ready !"
   883 0000066D 206572726F72206F72-
   883 00000676 206472697665206E6F-
   883 0000067F 742072656164792021 
   884 00000688 0D0A00                  	db	0Dh, 0Ah, 0
   885                                  
   886                                  msg_disk_write_error:
   887 0000068B 0D0A                    	db	0Dh, 0Ah
   888 0000068D 4469736B2077726974-     	db	"Disk write error !"
   888 00000696 65206572726F722021 
   889 0000069F 0D0A00                  	db	0Dh, 0Ah, 0
   890                                  
   891                                  msg_inv_backup_file:
   892 000006A2 0D0A                    	db	0Dh, 0Ah
   893 000006A4 496E76616C69642062-     	db	"Invalid backup file !", 0Dh, 0Ah
   893 000006AD 61636B75702066696C-
   893 000006B6 6520210D0A         
   894 000006BB 28496D70726F706572-     	db	"(Improper file attributes or wrong file size) !"
   894 000006C4 2066696C6520617474-
   894 000006CD 72696275746573206F-
   894 000006D6 722077726F6E672066-
   894 000006DF 696C652073697A6529-
   894 000006E8 2021               
   895 000006EA 0D0A00                  	db	0Dh, 0Ah, 0
   896                                  
   897                                  msg_inv_file_mbr:
   898 000006ED 0D0A                    	db	0Dh, 0Ah
   899 000006EF 496E76616C69642062-     	db	"Invalid backup file !", 0Dh, 0Ah
   899 000006F8 61636B75702066696C-
   899 00000701 6520210D0A         
   900 00000706 28496E76616C696420-     	db	"(Invalid MBR) !"	
   900 0000070F 4D4252292021       
   901 00000715 0D0A00                  	db	0Dh, 0Ah, 0
   902                                  
   903                                  msg_file_pbsv_error:
   904 00000718 0D0A                    	db	0Dh, 0Ah
   905 0000071A 4D4153544552424F4F-     	db	"MASTERBOOT SECTOR WRITING PERMISSION DENIED ! Because ... "
   905 00000723 5420534543544F5220-
   905 0000072C 57524954494E472050-
   905 00000735 45524D495353494F4E-
   905 0000073E 2044454E4945442021-
   905 00000747 204265636175736520-
   905 00000750 2E2E2E20           
   906 00000754 0D0A                    	db	0Dh, 0Ah
   907 00000756 537461727420736563-     	db	"Start sector of present active (or primary DOS) partition " 
   907 0000075F 746F72206F66207072-
   907 00000768 6573656E7420616374-
   907 00000771 69766520286F722070-
   907 0000077A 72696D61727920444F-
   907 00000783 532920706172746974-
   907 0000078C 696F6E20           
   908 00000790 0D0A                    	db	0Dh, 0Ah
   909 00000792 6861732076616C6964-     	db	"has valid boot sector signature; but start sector of the new "
   909 0000079B 20626F6F7420736563-
   909 000007A4 746F72207369676E61-
   909 000007AD 747572653B20627574-
   909 000007B6 207374617274207365-
   909 000007BF 63746F72206F662074-
   909 000007C8 6865206E657720     
   910 000007CF 0D0A                    	db	0Dh, 0Ah
   911 000007D1 61637469766520286F-     	db	"active (or primary DOS) partition has not a valid boot sector ! "
   911 000007DA 72207072696D617279-
   911 000007E3 20444F532920706172-
   911 000007EC 746974696F6E206861-
   911 000007F5 73206E6F7420612076-
   911 000007FE 616C696420626F6F74-
   911 00000807 20736563746F722021-
   911 00000810 20                 
   912 00000811 0D0A00                  	db	0Dh, 0Ah, 0
   913                                  
   914                                  SizeOfFile equ $-100
   915                                  
   916                                  ;=============================================================================
   917                                  ;        	uninitialized data
   918                                  ;=============================================================================
   919                                  
   920                                  bss_start:
   921                                  
   922                                  ABSOLUTE bss_start
   923                                  
   924                                  alignb 2
   925                                  
   926                                  mbr_file_name:  
   927 00000814 <res Dh>                	resb	13
   928 00000821 ??                      	resb	1 ; word alignment
   929                                  
   930                                  bss_clear_end:
   931                                  
   932                                  ;alignb 2
   933                                  
   934                                  ; Masterboot sector (MBR)
   935                                  
   936                                  MBR:  ;	backup
   937 00000822 <res 200h>              	resb	512	
   938                                  
   939                                  MasterBootBuff:
   940                                  MasterBootCode: 
   941 00000A22 <res 1BEh>              	resb	446 
   942                                  PartitionTable:
   943 00000BE0 <res 40h>               	resb	64
   944                                  MBIDCode:
   945 00000C20 ????                    	resw	1
   946                                  
   947                                  BootSectorBuff:
   948 00000C22 <res 200h>              	resb	512
   949                                  
   950 00000E22 ??                      option: resb 1
   951 00000E23 ??                      bootsig: resb 1
   952                                  	
   953                                  
   954                                  bss_end:	 	
