     1                                  ; ****************************************************************************
     2                                  ; mbsave.s (MBSAVE.COM) - TRDOS 386 Harddisk MBR Saving/Backup Utility
     3                                  ; 						   (for MSDOS/WINDOWS)
     4                                  ; ****************************************************************************
     5                                  ; Last Update: 11/10/2020
     6                                  ; ----------------------------------------------------------------------------
     7                                  ; Beginning: 03/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: To save masterboot sector (MBR) to a file before modifying it.
    15                                  ; ****************************************************************************
    16                                  ; nasm mbsave.s -l mbsave.lst -o MBSAVE.COM
    17                                  ; ----------------------------------------------------------------------------
    18                                  ; Derived from: bssave.s (BSSAVE.COM) by Erdogan Tan, 03/10/2020
    19                                  
    20                                  ; DTA (PSP+80h= Offset 128)
    21                                  DTA_Attrib equ 149 ; PDP+21
    22                                  DTA_Time equ 150 ; PSP+22
    23                                  DTA_Date equ 152 ; PSP 24
    24                                  DTA_FileSize equ 154 ; PSP + 26
    25                                  DTA_FileName equ 158 ; PSP + 30
    26                                  
    27                                  ; Masterboot / Partition Table at Beginning+1BEh
    28                                  ptBootable      equ 0
    29                                  ptBeginHead     equ 1
    30                                  ptBeginSector   equ 2
    31                                  ptBeginCylinder equ 3
    32                                  ptFileSystemID	equ 4
    33                                  ptEndHead       equ 5
    34                                  ptEndSector     equ 6
    35                                  ptEndCylinder   equ 7
    36                                  ptStartSector   equ 8
    37                                  ptSectors       equ 12
    38                                  
    39                                  ; BIOS INT 13h Extensions (LBA extensions)
    40                                  ; Just After DP Data (DPDiskNumber+)
    41                                  DAP_PacketSize equ 10h  ; If extensions present, this byte will be >=10h
    42                                  DAP_Reserved1 equ 11h   ; Reserved Byte 
    43                                  DAP_NumOfBlocks equ 12h ; Value of this byte must be 0 to 127
    44                                  DAP_Reserved2 equ 13h   ; Reserved Byte
    45                                  DAP_Destination equ 14h ; Address of Transfer Buffer as SEGMENT:OFFSET
    46                                  DAP_LBA_Address equ 18h ; LBA=(C1*H0+H1)*S0+S1-1
    47                                                          ; C1= Selected Cylinder Number
    48                                                          ; H0= Number Of Heads (Maximum Head Number + 1)
    49                                                          ; H1= Selected Head Number
    50                                                          ; S0= Maximum Sector Number
    51                                                          ; S1= Selected Sector Number
    52                                                          ; QUAD WORD
    53                                  ; DAP_Flat_Destination equ 20h ; 64 bit address, if value in 4h is FFFF:FFFFh
    54                                                               ; QUAD WORD (Also, value in 0h must be 18h) 
    55                                                               ; TR-DOS will not use 64 bit Flat Address
    56                                  
    57                                  pTableOffset equ 1BEh ; 446
    58                                  
    59                                  
    60                                  ; Known partition types
    61                                  
    62                                  ;FileSys_Names: ; 2003-2017
    63                                  ;; (Valid FileSystems for TRDOS 386, SINGLIX, RETRO UNIX OS projects in 2017)
    64                                  FS_FAT12	equ 1		; 01h = FAT12
    65                                  FS_XENIX	equ 2		; 02h , XENIX System V root
    66                                  FS_XENIX_USR	equ 3		; 03h , XENIX System V user
    67                                  FS_FAT16	equ 4		; 04h = FAT16 < 32MB
    68                                  FS_EXT_CHS	equ 5		; 05h = Extended DOS Partition
    69                                  FS_FAT16_BIG	equ 6		; 06h = FAT16 > 32MB, CHS mode
    70                                  FS_NTFS		equ 7		; 07h , WINDOWS NTFS Partition
    71                                  FS_FAT32_CHS	equ 11		; 0Bh = FAT32, CHS mode
    72                                  FS_FAT32_LBA	equ 12		; 0Ch = FAT32, LBA mode
    73                                  FS_FAT16_LBA	equ 14		; 0Eh = FAT16, LBA mode
    74                                  FS_EXT_LBA	equ 15		; 0Fh = Extented Partition, LBA mode
    75                                  FS_UNIX_SYSV	equ 99		; 63h , SCO UNIX, UNIXWARE, OPENSERVER
    76                                  FS_RETROUNIX	equ 113		; 71h , Retro UNIX 386 v2 Partition
    77                                  FS_UNIX_V7	equ 114		; 72h , UNIX v7 x86 Partition  
    78                                  FS_LINUXSWAP	equ 139		; 82h , LINUX SWAP Partition
    79                                  FS_LINUX	equ 131		; 83h , LINUX NATIVE (ext2) Partition
    80                                  FS_LINUXEXT	equ 133		; 85h , LINUX EXTENDED Partition
    81                                  FS_TRDD		equ 160		; A0h , (Random Data Disk) LBA
    82                                  FS_TRFS		equ 161		; A1h , (32 bit, 512 bytes per sector)
    83                                   
    84                                  [BITS 16]
    85                                  [ORG 100h]
    86                                  
    87                                  	;;cli
    88                                  	;;cld
    89                                  	;;push	cs
    90                                  	;;pop	ss
    91                                  	;;mov	sp, 0FFFEh
    92                                  	;;sti
    93                                  	;
    94                                  	;;mov	bx, SizeOfFile+100
    95                                  	;
    96                                  	;mov	bx, bss_end
    97                                  	;
    98                                          ;add	bx, 15
    99                                          ;shr	bx, 1
   100                                          ;shr	bx, 1
   101                                  	;shr	bx, 1
   102                                  	;shr	bx, 1
   103                                          ;mov	ah, 4Ah ; modify memory allocation
   104                                          ;;push	cs
   105                                          ;;pop	es
   106                                          ;int	21h
   107                                  
   108                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   109                                  ; clear BSS
   110                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   111                                  
   112                                  	;mov	cx, bss_clear_end
   113                                  	;
   114                                  	;mov	di, bss_start
   115                                  	;sub	cx, di
   116                                  	;;inc	cx
   117                                  	;shr	cx, 1
   118                                  	;xor	ax, ax
   119                                  	;rep	stosw 
   120                                  
   121                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   122                                  ; get command arguments (command tail)
   123                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   124                                  
   125 00000000 BE8000                  	mov	si, 80h			; PSP command tail
   126 00000003 AC                       	lodsb
   127 00000004 08C0                    	or	al, al 			; command tail length                            
   128 00000006 7421                    	jz	short _03		; jump if zero
   129                                  _01:
   130 00000008 AC                      	lodsb
   131 00000009 3C20                    	cmp	al, ' '			; is it SPACE ?
   132 0000000B 74FB                    	je	short _01 		
   133 0000000D 721A                    	jb	short _03
   134                                  
   135                                  	; check disk name
   136                                  
   137 0000000F 3C68                    	cmp	al, 'h'
   138 00000011 7516                    	jne	short _03	
   139 00000013 803C64                  	cmp	byte [si], 'd'
   140 00000016 7511                    	jne	short _03
   141 00000018 46                      	inc	si
   142 00000019 AC                      	lodsb
   143 0000001A 3C30                    	cmp	al, '0'
   144 0000001C 7406                    	je	short _02
   145 0000001E 7209                    	jb	short _03
   146 00000020 3C33                    	cmp	al, '3'
   147 00000022 7705                    	ja	short _03
   148                                  _02:
   149 00000024 803C20                  	cmp	byte [si], ' '
   150 00000027 7409                    	je	short _04
   151                                  _03:
   152 00000029 BE[C901]                	mov	si, TrDOS_Welcome
   153 0000002C E87701                  	call	print_msg
   154                                  
   155 0000002F E92F01                  	jmp	_29
   156                                  _04:
   157 00000032 46                      	inc	si
   158 00000033 0450                    	add	al, 80h - '0'
   159 00000035 A2[C801]                	mov	[DrvNum], al	; 80h .. 83h
   160                                  _05:
   161 00000038 AC                      	lodsb
   162 00000039 3C20                    	cmp	al, ' '
   163 0000003B 74FB                    	je	short _05
   164 0000003D 72EA                    	jb	short _03
   165                                  
   166                                  	; check backup file name
   167                                  _06:
   168 0000003F BF[8C04]                       	mov	di, mbr_file_name
   169 00000042 AA                      	stosb
   170                                  _07:
   171 00000043 AC                      	lodsb
   172                                  	;cmp	al, 0Dh ; ENTER (CR) key
   173 00000044 3C20                    	cmp	al, 20h ; ' '
   174 00000046 760C                    	jna	short _08
   175 00000048 AA                      	stosb
   176 00000049 81FF[9804]              	cmp	di, mbr_file_name + 12
   177 0000004D 72F4                    	jb	short _07
   178 0000004F 803C20                  	cmp	byte [si], 20h 
   179 00000052 7742                    	ja	short _14
   180                                  _08:
   181 00000054 28C0                    	sub	al, al
   182 00000056 AA                      	stosb
   183                                  
   184                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   185                                  ; File name capitalization
   186                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   187                                  
   188 00000057 BE[8C04]                	mov	si, mbr_file_name
   189 0000005A 89F7                    	mov	di, si
   190 0000005C 89F3                    	mov	bx, si
   191                                  _09:
   192 0000005E AC                      	lodsb
   193 0000005F 3C61                    	cmp	al, 'a'
   194 00000061 730D                    	jnb	short _11
   195 00000063 20C0                    	and	al, al
   196 00000065 7412                    	jz	short _12
   197 00000067 3C2E                    	cmp	al, '.'
   198 00000069 7502                    	jne	short _10
   199 0000006B 89FB                    	mov	bx, di ; dot position	
   200                                  _10:
   201 0000006D AA                      	stosb
   202 0000006E EBEE                    	jmp	short _09 		
   203                                  _11:
   204 00000070 3C7A                    	cmp	al, 'z'
   205 00000072 77F9                    	ja	short _10
   206 00000074 24DF                    	and	al, 0DFh ; NOT 32
   207 00000076 AA                      	stosb
   208 00000077 EBE5                    	jmp	short _09	
   209                                  _12:
   210 00000079 8805                    	mov	[di], al
   211 0000007B 4F                      	dec	di
   212 0000007C 39FB                    	cmp	bx, di
   213 0000007E 7316                    	jnb	short _14
   214 00000080 29DF                    	sub	di, bx
   215 00000082 81EB[8C04]              	sub	bx, mbr_file_name
   216 00000086 83FF03                  	cmp	di, 3
   217 00000089 7606                    	jna	short _13
   218 0000008B 21DB                    	and	bx, bx
   219 0000008D 7507                    	jnz	short _14
   220 0000008F EB0E                    	jmp	short _15		
   221                                  _13:
   222 00000091 83FB08                  	cmp	bx, 8
   223 00000094 7609                    	jna	short _15
   224                                  _14:
   225 00000096 BE[2103]                	mov	si, msg_inv_file_name
   226 00000099 E80A01                  	call	print_msg
   227 0000009C E9C200                  	jmp	_29
   228                                  
   229                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   230                                  ; Find masterboot record/sector (MBR) backup file
   231                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   232                                  	
   233                                  _15:
   234 0000009F BA[8C04]                	mov	dx, mbr_file_name
   235 000000A2 B93F00                  	mov	cx, 3Fh ; File Attributes
   236 000000A5 B44E                    	mov	ah, 4Eh ; MS-DOS Function = Find First File
   237 000000A7 CD21                    	int	21h
   238 000000A9 725D                    	jc	short _20
   239                                  
   240                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   241                                  ; Check mbr backup file features
   242                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   243                                  
   244 000000AB BE9500                  	mov	si, DTA_Attrib
   245 000000AE 8A04                    	mov	al, [si]
   246 000000B0 241F                    	and	al, 1Fh ; directory, volume label, system, hidden, read only
   247 000000B2 753A                    	jnz	short _17     
   248 000000B4 BE9A00                  	mov	si, DTA_FileSize
   249 000000B7 AD                      	lodsw
   250 000000B8 8B14                    	mov	dx, [si]
   251 000000BA 09C2                    	or	dx, ax 
   252 000000BC 744A                    	jz	short _20 ; zero file size (do not display owr question)	
   253                                  
   254                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   255                                  ; Display file overwrite question and get the answer (Y/N/ESC)
   256                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   257                                  
   258 000000BE BE[A903]                	mov	si, msg_overwrite_question1
   259 000000C1 E8E200                  	call	print_msg
   260                                  
   261 000000C4 BE[8C04]                	mov	si, mbr_file_name
   262 000000C7 E8DC00                  	call	print_msg
   263                                  
   264 000000CA BE[C603]                	mov	si, msg_overwrite_question2
   265 000000CD E8D600                  	call	print_msg
   266                                  
   267                                  _16:
   268 000000D0 31C0                    	xor	ax, ax
   269 000000D2 CD16                    	int	16h			; wait for keyboard command
   270 000000D4 3C79                    	cmp	al, 'y'
   271 000000D6 7424                    	je	short _19		; retry
   272 000000D8 3C59                    	cmp	al, 'Y'
   273 000000DA 7420                    	je	short _19
   274 000000DC 3C6E                    	cmp	al, 'n'
   275 000000DE 7414                    	je	short _18 		; exit
   276 000000E0 3C4E                    	cmp	al, 'N'
   277 000000E2 7410                    	je	short _18
   278 000000E4 3C03                    	cmp	al, 'C'-40h
   279 000000E6 7479                    	je	_29              
   280 000000E8 3C1B                    	cmp	al, 27
   281 000000EA 75E4                    	jne	short _16
   282 000000EC EB73                    	jmp	_29
   283                                  
   284                                  	; invalid backup file !
   285                                  _17:
   286 000000EE BE[4F04]                	mov	si, msg_inv_backup_file
   287 000000F1 E9A200                  	jmp	_32
   288                                  _18:
   289 000000F4 BE[D403]                	mov	si, _NO
   290 000000F7 E8AC00                  	call	print_msg
   291 000000FA EB65                    	jmp	_29
   292                                  _19:
   293 000000FC BE[D003]                	mov	si, _YES
   294 000000FF E8A400                  	call	print_msg
   295                                  
   296                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   297                                  ; Next line
   298                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   299                                  
   300 00000102 BE[EF03]                	mov	si, CRLF
   301 00000105 E89E00                  	call	print_msg
   302                                  
   303                                  _20:
   304                                  
   305                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   306                                  ; Read masterboot sector (MBR)
   307                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   308                                  
   309 00000108 BF0500                  	mov	di, 5
   310                                  
   311                                  	;mov	ax, 0201h		; read disk
   312 0000010B BB[9A04]                	mov	bx, MasterBootBuff	; location of masterboot code
   313                                  
   314 0000010E B90100                  	mov	cx, 1			; cylinder = 0
   315                                  					; sector = 1
   316 00000111 B600                    	mov	dh, 0			; head = 0
   317 00000113 8A16[C801]              	mov	dl, [DrvNum]		; drive number, 80h .. 83h
   318                                  _21:
   319 00000117 B80102                  	mov	ax, 0201h
   320 0000011A CD13                    	int	13h
   321 0000011C 730C                    	jnc	short _22		; read masterboot sector, OK
   322                                  	
   323                                   	; reset hard disk(s)
   324 0000011E 30E4                    	xor	ah, ah
   325                                  	;mov	dl, [drv]
   326 00000120 CD13                    	int	13h
   327                                  
   328                                  	;dec	byte [RetryCount]
   329 00000122 4F                      	dec	di
   330 00000123 75F2                    	jnz	short _21
   331                                  
   332                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   333                                  ; write disk error message and terminate
   334                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   335                                  
   336 00000125 BE[2504]                	mov	si, msg_disk_not_ready_error
   337 00000128 EB6C                    	jmp	_32
   338                                  
   339                                  _22:
   340                                  
   341                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   342                                  ; Check MBR if it is valid and it contains a known partition
   343                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   344                                  
   345 0000012A 813E[9806]55AA          	cmp 	word [MBIDCode], 0AA55h
   346 00000130 7405                    	je	short _23 ; Valid MBR	
   347                                  
   348                                  	; invalid MBR !
   349                                  
   350 00000132 BE[9603]                	mov	si, msg_inv_mbr
   351 00000135 EB5F                    	jmp	short _32
   352                                  
   353                                  _23:
   354                                  	; check if MBR contains a known type of partition or not
   355                                  
   356 00000137 BE[5806]                	mov	si, MasterBootBuff+pTableOffset
   357                                  _24:
   358 0000013A BB[B401]                	mov	bx, known_partitions
   359 0000013D B91300                  	mov	cx, kpc-known_partitions
   360                                  _25:
   361 00000140 8A4404                  	mov	al, [si+ptFileSystemID]
   362 00000143 08C0                    	or	al, al
   363 00000145 740A                    	jz	short _27
   364                                  _26:	
   365 00000147 3A07                    	cmp	al, [bx]
   366 00000149 741B                    	je	short _30
   367 0000014B 49                      	dec	cx
   368 0000014C 7403                    	jz	short _27
   369 0000014E 43                      	inc	bx
   370 0000014F EBF6                    	jmp	short _26
   371                                  _27:
   372 00000151 81FE[9806]              	cmp	si, MasterBootBuff+pTableOffset+64
   373 00000155 7305                    	jnb	short _28
   374 00000157 83C610                  	add	si, 16
   375 0000015A EBDE                    	jmp	short _24
   376                                  _28:
   377                                  	; MBR does not contain a known partition type
   378 0000015C BE[6303]                	mov	si, msg_kp_notfound
   379 0000015F EB35                    	jmp	short _32
   380                                  _29:
   381 00000161 BE[EF03]                	mov	si, CRLF
   382 00000164 EB30                    	jmp	short _32
   383                                  
   384                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   385                                  ; Create new file or overwrite/truncate existing file
   386                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   387                                  
   388                                  _30:
   389 00000166 31C9                    	xor	cx, cx  ; 0 ; Regular file with write permission
   390 00000168 BA[8C04]                	mov	dx, mbr_file_name
   391 0000016B B8003C                  	mov	ax, 3C00h ; create a file
   392 0000016E CD21                    	int	21h
   393 00000170 722E                    	jc	short _34
   394                                  
   395                                  	;mov	[bs_file_handle], ax
   396 00000172 89C1                    	mov	cx, ax
   397                                  
   398                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   399                                  ; Writing MBR to the backup file
   400                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   401                                  
   402 00000174 BE[D703]                	mov	si, msg_writing_file
   403 00000177 E82C00                  	call	print_msg
   404                                  
   405                                  	;mov	bx, [bs_file_handle]
   406 0000017A 89CB                    	mov	bx, cx
   407 0000017C B90002                  	mov	cx, 512 ; MBR size in bytes
   408 0000017F BA[9A04]                	mov	dx, MasterBootBuff
   409 00000182 B440                    	mov	ah, 40h	; write to file	
   410 00000184 CD21                    	int	21h
   411                                  
   412 00000186 9C                      	pushf
   413 00000187 B43E                    	mov	ah, 3Eh ; close file
   414                                  	;mov	bx, [bs_file_handle]
   415 00000189 CD21                    	int	21h
   416 0000018B 9D                      	popf
   417 0000018C 7305                    	jnc	short _31
   418                                  
   419                                  	; Masterboot sector backup file writing error !
   420 0000018E BE[0C04]                	mov	si, msg_file_write_error
   421 00000191 EB03                    	jmp	short _32
   422                                  _31:
   423 00000193 BE[EB03]                	mov	si, msg_OK
   424                                  _32:
   425 00000196 E80D00                  	call	print_msg
   426                                  
   427                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   428                                  ; Exit
   429                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   430                                  
   431 00000199 B8004C                  	mov	ax, 4C00h		; terminate
   432 0000019C CD21                    	int	21h
   433                                  _33:
   434 0000019E EBFE                    	jmp	short _33
   435                                  _34:
   436 000001A0 BE[F203]                	mov	si, msg_file_create_error
   437 000001A3 EBF1                    	jmp	short _32
   438                                  
   439                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   440                                  ; print message
   441                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   442                                  
   443                                  _35:
   444 000001A5 C3                      	retn
   445                                  
   446                                  print_msg:
   447 000001A6 AC                      	lodsb				; Load byte at DS:SI to AL
   448 000001A7 20C0                    	and	al, al            
   449 000001A9 74FA                    	jz	short _35     
   450 000001AB B40E                    	mov	ah, 0Eh			
   451 000001AD BB0700                  	mov	bx, 07h             
   452 000001B0 CD10                    	int	10h			; BIOS Service func ( ah ) = 0Eh
   453                                  					; Write char as TTY
   454                                  					; AL-char BH-page BL-color
   455 000001B2 EBF2                    	jmp     short print_msg          
   456                                  
   457                                  ;=============================================================================
   458                                  ;        	initialized data
   459                                  ;=============================================================================
   460                                  
   461                                  known_partitions:
   462 000001B4 0102030405              	      db FS_FAT12, FS_XENIX, FS_XENIX_USR, FS_FAT16, FS_EXT_CHS
   463 000001B9 06070B0C                	      db FS_FAT16_BIG, FS_NTFS, FS_FAT32_CHS, FS_FAT32_LBA	
   464 000001BD 0E0F6371                	      db FS_FAT16_LBA, FS_EXT_LBA, FS_UNIX_SYSV, FS_RETROUNIX 	
   465 000001C1 728B8385                	      db FS_UNIX_V7, FS_LINUXSWAP, FS_LINUX, FS_LINUXEXT
   466 000001C5 A0A1                    	      db FS_TRDD, FS_TRFS
   467                                  
   468 000001C7 00                      kpc:	db	0			
   469                                   
   470                                  DrvNum:
   471 000001C8 00                      	db	0
   472                                  
   473                                  ;align 2
   474                                  
   475                                  ;bs_file_handle:
   476                                  ;	dw	0
   477                                  
   478                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   479                                  ;  Messages
   480                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   481                                  
   482                                  TrDOS_Welcome:
   483 000001C9 0D0A                    	db	0Dh, 0Ah
   484 000001CB 4D6173746572426F6F-     	db	"MasterBoot Record/Sector Backup Utility for TR-DOS 386"
   484 000001D4 74205265636F72642F-
   484 000001DD 536563746F72204261-
   484 000001E6 636B7570205574696C-
   484 000001EF 69747920666F722054-
   484 000001F8 522D444F5320333836 
   485 00000201 0D0A                    	db	0Dh, 0Ah
   486 00000203 76312E302E31313130-     	db	"v1.0.111020 (c) Erdogan TAN 2020"
   486 0000020C 323020286329204572-
   486 00000215 646F67616E2054414E-
   486 0000021E 2032303230         
   487 00000223 0D0A                    	db	0Dh, 0Ah
   488 00000225 0D0A                    	db	0Dh, 0Ah
   489 00000227 55736167653A206D62-     	db	"Usage: mbsave <disk drive name> <backup file name>"
   489 00000230 73617665203C646973-
   489 00000239 6B206472697665206E-
   489 00000242 616D653E203C626163-
   489 0000024B 6B75702066696C6520-
   489 00000254 6E616D653E         
   490 00000259 0D0A                    	db	0Dh, 0Ah
   491 0000025B 0D0A                    	db	0Dh, 0Ah
   492 0000025D 4469736B2064726976-     	db	"Disk drive names: "
   492 00000266 65206E616D65733A20 
   493 0000026F 0D0A                    	db	0Dh, 0Ah
   494 00000271 0D0A                    	db	0Dh, 0Ah
   495 00000273 20686430202E2E666F-     	db	" hd0 ..for MBR of 1st hard disk "
   495 0000027C 72204D4252206F6620-
   495 00000285 317374206861726420-
   495 0000028E 6469736B20         
   496 00000293 0D0A                    	db	0Dh, 0Ah
   497 00000295 20686431202E2E666F-     	db	" hd1 ..for MBR of 2nd hard disk "
   497 0000029E 72204D4252206F6620-
   497 000002A7 326E64206861726420-
   497 000002B0 6469736B20         
   498 000002B5 0D0A                    	db	0Dh, 0Ah
   499 000002B7 20686432202E2E666F-     	db	" hd2 ..for MBR of 3rd hard disk "
   499 000002C0 72204D4252206F6620-
   499 000002C9 337264206861726420-
   499 000002D2 6469736B20         
   500 000002D7 0D0A                    	db	0Dh, 0Ah
   501 000002D9 20686433202E2E666F-     	db	" hd3 ..for MBR of 4th hard disk "
   501 000002E2 72204D4252206F6620-
   501 000002EB 347468206861726420-
   501 000002F4 6469736B20         
   502 000002F9 0D0A0D0A                	db	0Dh, 0Ah, 0Dh, 0Ah
   503 000002FD 4578616D706C653A20-     	db	"Example: mbsave hd0 mbsector.bin "
   503 00000306 6D6273617665206864-
   503 0000030F 30206D62736563746F-
   503 00000318 722E62696E20       
   504 0000031E 0D0A00                  	db	0Dh, 0Ah, 0
   505                                  
   506                                  msg_inv_file_name: 
   507 00000321 0D0A                    	db	0Dh, 0Ah
   508 00000323 496E76616C69642066-     	db	"Invalid file name !", 0Dh, 0Ah
   508 0000032C 696C65206E616D6520-
   508 00000335 210D0A             
   509 00000338 2846696C65206E616D-     	db	"(File name must fit to 8.3 DOS format) !"
   509 00000341 65206D757374206669-
   509 0000034A 7420746F20382E3320-
   509 00000353 444F5320666F726D61-
   509 0000035C 74292021           
   510 00000360 0D0A00                  	db	0Dh, 0Ah, 0
   511                                  
   512                                  msg_kp_notfound:
   513 00000363 0D0A                    	db	0Dh, 0Ah
   514 00000365 4D425220646F657320-     	db	'MBR does not contain a known partition type ! '	
   514 0000036E 6E6F7420636F6E7461-
   514 00000377 696E2061206B6E6F77-
   514 00000380 6E2070617274697469-
   514 00000389 6F6E20747970652021-
   514 00000392 20                 
   515 00000393 0D0A                    	db	0Dh, 0Ah
   516 00000395 00                      	db	0
   517                                  
   518                                  msg_inv_mbr:
   519 00000396 0D0A                    	db	0Dh, 0Ah
   520 00000398 496E76616C6964204D-     	db	'Invalid MBR ! '	
   520 000003A1 4252202120         
   521 000003A6 0D0A00                  	db	0Dh, 0Ah, 0
   522                                  
   523                                  msg_overwrite_question1:
   524 000003A9 0D0A                    	db	0Dh, 0Ah
   525 000003AB 446F20796F75207761-     	db	'Do you want to overwrite '
   525 000003B4 6E7420746F206F7665-
   525 000003BD 72777269746520     
   526 000003C4 27                      	db	27h
   527 000003C5 00                      	db	0
   528                                  
   529                                  msg_overwrite_question2: 
   530 000003C6 27                      	db	27h
   531 000003C7 2066696C65203F20        	db	' file ? '
   532 000003CF 00                      	db	0
   533                                  
   534 000003D0 594553                  _YES:	db	'YES'
   535                                  	;db	0Dh, 0Ah, 0
   536 000003D3 00                      	db	0
   537                                  
   538 000003D4 4E4F                    _NO:	db	'NO'
   539                                  	;db	0Dh, 0Ah, 0
   540 000003D6 00                      	db	0
   541                                  
   542                                  msg_writing_file:
   543 000003D7 0D0A                    	db	0Dh, 0Ah
   544 000003D9 57726974696E672066-     	db	'Writing file ... '
   544 000003E2 696C65202E2E2E20   
   545 000003EA 00                      	db	0
   546                                  msg_OK:
   547 000003EB 204F4B2E                	db	' OK.'
   548                                  CRLF:
   549 000003EF 0D0A00                  	db	0Dh, 0Ah, 0
   550                                  
   551                                  msg_file_create_error:
   552 000003F2 0D0A                    	db	0Dh, 0Ah
   553 000003F4 46696C652063726561-     	db	"File creating error !"
   553 000003FD 74696E67206572726F-
   553 00000406 722021             
   554 00000409 0D0A00                  	db	0Dh, 0Ah, 0
   555                                  
   556                                  msg_file_write_error:
   557 0000040C 0D0A                    	db	0Dh, 0Ah
   558 0000040E 46696C652077726974-     	db	"File writing error !"
   558 00000417 696E67206572726F72-
   558 00000420 2021               
   559 00000422 0D0A00                  	db	0Dh, 0Ah, 0
   560                                  
   561                                  msg_disk_not_ready_error:
   562 00000425 0D0A                    	db	0Dh, 0Ah
   563 00000427 4469736B2072656164-     	db	"Disk read error or drive not ready ! "
   563 00000430 206572726F72206F72-
   563 00000439 206472697665206E6F-
   563 00000442 742072656164792021-
   563 0000044B 20                 
   564 0000044C 0D0A00                  	db	0Dh, 0Ah, 0
   565                                  
   566                                  msg_inv_backup_file:
   567 0000044F 0D0A                    	db	0Dh, 0Ah
   568 00000451 496E76616C69642062-     	db	"Invalid backup file name !", 0Dh, 0Ah
   568 0000045A 61636B75702066696C-
   568 00000463 65206E616D6520210D-
   568 0000046C 0A                 
   569 0000046D 28496D70726F706572-     	db	"(Improper file attributes) !"
   569 00000476 2066696C6520617474-
   569 0000047F 726962757465732920-
   569 00000488 21                 
   570 00000489 0D0A00                  	db	0Dh, 0Ah, 0
   571                                  
   572                                  SizeOfFile equ $-100
   573                                  
   574                                  ;=============================================================================
   575                                  ;        	uninitialized data
   576                                  ;=============================================================================
   577                                  
   578                                  bss_start:
   579                                  
   580                                  ABSOLUTE bss_start
   581                                  
   582                                  alignb 2
   583                                  
   584                                  mbr_file_name:  
   585 0000048C <res Dh>                	resb	13
   586 00000499 ??                      	resb	1 ; word alignment
   587                                  
   588                                  bss_clear_end:
   589                                  
   590                                  ;alignb 2
   591                                  
   592                                  ; Masterboot sector (MBR)
   593                                  
   594                                  MasterBootBuff:
   595                                  MasterBootCode: 
   596 0000049A <res 1BEh>              	resb	446 
   597                                  PartitionTable:
   598 00000658 <res 40h>               	resb	64
   599                                  MBIDCode:
   600 00000698 ????                    	resw	1
   601                                  
   602                                  bss_end:	 	
