     1                                  ; ****************************************************************************
     2                                  ; dsectpm3.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'dsectpm3.prg')
     3                                  ; ---------------------------------------------------------------------------
     4                                  ; DSECTPM3.PRG ! TEST program !
     5                                  ; 'Display Disk Sectors' by using TRDOS 386 disk and timer interrupts.
     6                                  ;
     7                                  ; 27/05/2016 - 07/07/202016 (dsectpm2)
     8                                  ; 28/08/2020 (dsectpm3)
     9                                  ;
    10                                  ; Derived from 'dsectrm2.s' source code for Retro UNIX 386 v1 'boot'
    11                                  ;
    12                                  ; [ Last Modification: 26/10/2020 ]
    13                                  ;
    14                                  ; ****************************************************************************
    15                                  ; dsectrm2.s (21/02/2015, Retro UNIX 386 v1, standalone program, real mode)
    16                                  ; dsectpm.s (28/02/2015, Retro UNIX 386 v1, standalone prog, protected mode)
    17                                  ; dsectpm2.s (07/07/2016, TRDOS 386 v1 application, protected mode program)
    18                                  ; 
    19                                  ; Assembler: NASM 2.11
    20                                  
    21                                  ; display disk sector data [Retro Unix 386 v1 - test ]
    22                                  ; by Erdogan Tan [ Real Mode adaption (Standalone program), 21/02/2015 ]
    23                                  
    24                                  ESCKey	 equ 1Bh    ;27		
    25                                  ENTERKey equ 0Dh    ;13
    26                                  SPACEKey equ 20h    ;32
    27                                  BACKSPC	 equ 08h    ; 8
    28                                  DELKey	 equ 53E0h
    29                                  F1Key	 equ 3B00h
    30                                  F2Key	 equ 3C00h
    31                                  F3Key	 equ 3D00h
    32                                  F4Key	 equ 3E00h ; 28/08/2020
    33                                  HOMEKey  equ 47E0h
    34                                  ENDKey	 equ 4FE0h
    35                                  PgUpKey	 equ 49E0h
    36                                  PgDnKey  equ 51E0h 
    37                                  
    38                                  ; 02/07/2016
    39                                  
    40                                  [BITS 32]
    41                                  	
    42                                  	; clear bss area
    43                                  
    44                                  	; ecx = 0
    45 00000000 B9B8120000              	mov	ecx, bss_end - bss_start
    46 00000005 66C1E902                	shr	cx, 2 ; dword count
    47 00000009 BF[60180000]            	mov	edi, bss_start
    48                                  	; eax = 0
    49                                  	;xor	eax, eax
    50 0000000E F3AB                    	rep	stosd
    51                                  	
    52 00000010 BE[9C170000]                    mov     esi, prg_msg
    53 00000015 E8EA0D0000              	call	print_msg
    54                                  
    55                                  	; 26/10/2020
    56                                  	;mov	eax, 18
    57 0000001A B012                    	mov	al, 18	; get/set current drive 
    58                                  			; trdos 386 'sysdrive' system call 
    59 0000001C B3FF                    	mov	bl, 0FFh ; get current drive				
    60 0000001E CD40                    	int	40h	; trdos 386 system calls
    61 00000020 3C02                    	cmp	al, 2	; hard disk ?
    62 00000022 7207                    	jb	short	_fd0
    63                                  
    64 00000024 C605[9B150000]02        	mov	byte [ds_drv], 2 ; 1st harddisk (hd0)
    65                                  
    66                                  	; Filling disk parameters tables
    67                                  _fd0:
    68                                  	;xor	dl, dl ; fd0
    69                                  	;mov	[drv], dl
    70 0000002B BB[B0180000]            	mov	ebx, fd0_dpt
    71 00000030 B408                    	mov	ah, 08h	; return disk parameters
    72 00000032 CD33                      	int	33h	; TRDOS 386 disk io interrupt
    73 00000034 724B                    	jc	short _hd0
    74 00000036 C605[6E180000]80        	mov	byte [drv_status], 80h
    75 0000003D 001D[32180000]          	add	[fd0_type], bl
    76 00000043 8815[162B0000]          	mov	[fdc], dl
    77 00000049 E899080000              	call	set_disk_parms
    78 0000004E FE0D[162B0000]          	dec	byte [fdc]
    79 00000054 742B                    	jz	short _hd0
    80                                  _fd1:
    81 00000056 B201                    	mov	dl, 1 ; fd1
    82 00000058 8815[6D180000]          	mov	[drv], dl
    83 0000005E BB[C0180000]            	mov	ebx, fd1_dpt
    84 00000063 B408                    	mov	ah, 08h	; return disk parameters
    85 00000065 CD33                      	int	33h	; TRDOS 386 disk io interrupt
    86 00000067 7218                    	jc	short _hd0
    87 00000069 C605[6F180000]80        	mov	byte [drv_status+1], 80h
    88 00000070 001D[33180000]          	add	[fd1_type], bl
    89 00000076 E86C080000              	call	set_disk_parms
    90 0000007B FE0D[162B0000]                  dec     byte [fdc] ; = 0 
    91                                  _hd0:
    92 00000081 B280                    	mov	dl, 80h ; hd0
    93 00000083 8815[6D180000]          	mov	[drv], dl
    94 00000089 BB[D0180000]            	mov	ebx, hd0_dpt
    95 0000008E B408                    	mov	ah, 08h	; return disk parameters
    96 00000090 CD33                      	int	33h	; TRDOS 386 disk io interrupt
    97 00000092 7224                    	jc	short _hd1
    98 00000094 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
    99 00000097 C0E806                  	shr	al, 6 ; bit 6 = bit 0
   100 0000009A 0480                    	add	al, 80h
   101 0000009C A2[70180000]            	mov	[drv_status+2], al
   102 000000A1 8815[152B0000]          	mov	[hdc], dl
   103 000000A7 E83B080000              	call	set_disk_parms
   104 000000AC FE0D[152B0000]          	dec	byte [hdc]  ; number of fixed disk drives - 1
   105 000000B2 0F8485000000            	jz	sccps
   106                                  _hd1:
   107 000000B8 B281                    	mov	dl, 81h ; hd1
   108 000000BA 8815[6D180000]          	mov	[drv], dl
   109 000000C0 BB[F0180000]            	mov	ebx, hd1_dpt
   110 000000C5 B408                    	mov	ah, 08h	; return disk parameters
   111 000000C7 CD33                      	int	33h	; TRDOS 386 disk io interrupt
   112 000000C9 721A                    	jc	short _hd2
   113 000000CB 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   114 000000CE C0E806                  	shr	al, 6 ; bit 6 = bit 0
   115 000000D1 0480                    	add	al, 80h
   116 000000D3 A2[71180000]            	mov	[drv_status+3], al
   117 000000D8 E80A080000              	call	set_disk_parms
   118 000000DD FE0D[152B0000]          	dec	byte [hdc]
   119 000000E3 7458                    	jz	short sccps
   120                                  _hd2:
   121 000000E5 B282                    	mov	dl, 82h ; hd2
   122 000000E7 8815[6D180000]          	mov	[drv], dl
   123 000000ED BB[10190000]            	mov	ebx, hd2_dpt
   124 000000F2 B408                    	mov	ah, 08h	; return disk parameters
   125 000000F4 CD33                      	int	33h	; TRDOS 386 disk io interrupt
   126 000000F6 721A                    	jc	short _hd3
   127 000000F8 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   128 000000FB C0E806                  	shr	al, 6 ; bit 6 = bit 0
   129 000000FE 0480                    	add	al, 80h
   130 00000100 A2[72180000]            	mov	[drv_status+4], al
   131 00000105 E8DD070000              	call	set_disk_parms
   132 0000010A FE0D[152B0000]          	dec	byte [hdc]
   133 00000110 742B                    	jz	short sccps
   134                                  _hd3:
   135 00000112 B283                    	mov	dl, 83h ; hd3
   136 00000114 8815[6D180000]          	mov	[drv], dl
   137 0000011A BB[30190000]            	mov	ebx, hd3_dpt
   138 0000011F B408                    	mov	ah, 08h	; return disk parameters
   139 00000121 CD33                      	int	33h	; TRDOS 386 disk io interrupt
   140 00000123 7218                    	jc	short sccps
   141 00000125 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   142 00000128 C0E806                  	shr	al, 6 ; bit 6 = bit 0
   143 0000012B 0480                    	add	al, 80h
   144 0000012D A2[73180000]            	mov	[drv_status+5], al
   145 00000132 E8B0070000              	call	set_disk_parms
   146 00000137 FE0D[152B0000]          	dec	byte [hdc] ; = 0
   147                                  
   148                                  sccps:
   149                                  	; get cursor position
   150 0000013D 31DB                    	xor	ebx, ebx ; bh = video page 0
   151 0000013F B403                    	mov	ah, 03h	; get cursor position and shape
   152 00000141 CD31                    	int	31h 	; TRDOS 386 video interrupt
   153                                  			; (IBM PC/AT ROMBIOS, INT 10h) 	
   154 00000143 668915[60180000]        	mov	[cursor_posn], dx ; position
   155 0000014A 66890D[62180000]        	mov	[cursor_shp], cx ; shape
   156                                  
   157                                  	; Save video page (before displaying sector)
   158                                  
   159                                  	; copy video page 0 to video page 6
   160                                  	;sub	ebx, ebx ; bl = 0 -> system to system
   161                                  			 ; bh = 0 -> 80*25 text mode 
   162 00000151 28C9                    	sub	cl, cl   ; source = video page 0
   163 00000153 B206                    	mov	dl, 6    ; destination = video page 6
   164 00000155 B81F000000              	mov	eax, 31  ; 'sysvideo'
   165 0000015A CD40                    	int	40h	 ; TRDOS 386 system call  
   166                                  
   167                                  display_sectors:
   168 0000015C E868070000              	call	hide_cursor
   169                                  	; Save cursor position
   170 00000161 66A1[60180000]          	mov	ax, [cursor_posn] ; cursor pos. 
   171                                  				  ; for video page 0
   172 00000167 66A3[64180000]          	mov	[cursor_posb], ax
   173 0000016D E88A050000              	call	clear_frame
   174                                  
   175                                  	; start (Real Time Clock) timer function
   176 00000172 B3FF                            mov     bl, 0FFh ; signal return (response) byte
   177 00000174 B703                            mov     bh, 3    ; 1 second (rtc interrupt) 
   178                                  	;mov	ecx, 1
   179 00000176 66B90100                	mov	cx, 1
   180 0000017A BA[5B180000]            	mov	edx, timer_event ; signal return (response) address
   181 0000017F B821000000              	mov	eax, 33	; 'systimer'
   182 00000184 CD40                    	int	40h	; TRDOS 386 system call
   183 00000186 7253                            jc      short dscl_0
   184                                  
   185 00000188 A2[142B0000]            	mov	[timer_event_number], al 
   186                                  
   187 0000018D EB4C                    	jmp	short dscl_0
   188                                  
   189                                  dscl_esc:
   190 0000018F E81E040000              	call	restore_video_page
   191                                  dscl_getc:
   192 00000194 E8BF030000              	call	getch
   193                                  	;
   194 00000199 3C1B                    	cmp	al, ESCKey
   195 0000019B 0F847C030000                    je      dscl_exit
   196 000001A1 C605[67180000]00        	mov	byte [dscmd], 0 ; reset
   197                                  	; 29/08/2020
   198 000001A8 663D003B                	cmp	ax, F1Key
   199 000001AC 0F82D3020000            	jb	dscl_6	
   200 000001B2 7427                    	je	short dscl_0 ; [dscmd] = 0
   201                                  	; 28/08/2020
   202 000001B4 663D003E                	cmp	ax, F4Key
   203                                  	;ja	dscl_6 ; not one of F1 to F4 functions
   204 000001B8 0F87D7020000            	ja	dscl_29 ; 29/08/2020
   205 000001BE 7209                    	jb	short dscl_f3 ; F3key or F2Key
   206                                  dscl_f4:
   207 000001C0 C605[67180000]03        	mov	byte [dscmd], 3 ; Display disk size (and CHS)
   208 000001C7 EB12                    	jmp	short dscl_0
   209                                  dscl_f3:
   210                                  	; 29/08/2020
   211                                  	;cmp	ax, F1Key
   212                                          ;je	short dscl_0 ; [dscmd] = 0
   213                                  	;
   214 000001C9 FE05[67180000]          	inc	byte [dscmd] ; 1
   215                                  	; 28/08/2020
   216                                  	;cmp	ax, F3Key
   217                                  	;jb	short dscl_5 ; F2Key
   218                                  	; 29/08/2020
   219 000001CF 663D003C                	cmp	ax, F2Key
   220 000001D3 7430                    	je	short dscl_5
   221                                  	; 28/08/2020
   222 000001D5 FE05[67180000]          	inc	byte [dscmd] ; 2
   223                                  	; Display disk parameters (HDPT table)
   224                                  dscl_0:
   225 000001DB E8C4030000              	call	save_video_page
   226 000001E0 BE[BF160000]            	mov	esi, F1_ib ; F1 (Change drive)
   227                                  			   ; Inputbox address
   228                                  dscl_ib:
   229 000001E5 E82E060000              	call	inputbox
   230                                  		; cursor position in DX
   231 000001EA E8E1060000              	call	show_cursor
   232                                  		; cursor blinks at current position
   233 000001EF 8B0D[68190000]          	mov	ecx, [prev_sec]
   234                                  dscl_3:
   235 000001F5 E85E030000              	call	getch
   236 000001FA 3C1B                    	cmp	al, ESCKey
   237 000001FC 7513                    	jne	short dscl_27
   238 000001FE E8C6060000                      call    hide_cursor
   239 00000203 EB8A                            jmp     dscl_esc
   240                                  dscl_5:
   241                                  	; 28/08/2020
   242                                  	;cmp	ax, F2Key
   243                                  	;jne	dscl_6
   244 00000205 E89A030000              	call	save_video_page
   245 0000020A BE[CD160000]            	mov	esi, F2_ib ; F2 (Change sector)
   246                                  		           ; Inputbox address
   247                                  	;mov	byte [dscmd], 1
   248 0000020F EBD4                            jmp     short dscl_ib
   249                                  dscl_27:
   250 00000211 3C20                    	cmp	al, SPACEKey
   251 00000213 7444                    	je	short dscl_4	
   252 00000215 3C0D                         	cmp	al, ENTERKey
   253 00000217 7440                    	je	short dscl_4
   254                                  	;
   255 00000219 31DB                    	xor	ebx, ebx
   256 0000021B 803D[67180000]01            	cmp     byte [dscmd], 1
   257 00000222 0F8481000000            	je	dscl_12
   258                                  	;
   259 00000228 3C30                    	cmp	al, '0'
   260 0000022A 72C9                    	jb	short dscl_3
   261 0000022C 3C35                    	cmp	al, '5'
   262 0000022E 77C5                    	ja	short dscl_3
   263 00000230 8B3D[5C180000]          	mov	edi, [current_txtpos]
   264 00000236 AA                      	stosb
   265                                  	;
   266                                  	;xor	bh, bh  ; video page 0
   267 00000237 66B90100                	mov	cx, 1   ; character count
   268 0000023B B40A                    	mov	ah, 0Ah ; write chr at current cursor pos.
   269 0000023D CD31                    	int	31h     ; TRDOS 386 video interrupt
   270                                  	;
   271 0000023F 2C30                    	sub	al, '0'
   272 00000241 88C2                    	mov	dl, al
   273 00000243 30F6                    	xor	dh, dh
   274 00000245 88C3                    	mov	bl, al
   275 00000247 C0E302                  	shl	bl, 2  ; *4
   276 0000024A 81C3[50190000]          	add	ebx, ds_sec ; current_sector
   277 00000250 8B0B                    	mov	ecx, [ebx]
   278 00000252 BE[6C190000]                    mov     esi, sector_buffer
   279 00000257 EB9C                    	jmp	short dscl_3 
   280                                  dscl_4:
   281 00000259 803D[68180000]00        	cmp	byte [inds],  0 ; display other half or not ?
   282 00000260 0F8733010000                    ja      dscl_oh         ; other half
   283 00000266 6652                    	push	dx
   284                                  	; save regs (ESI, ECX, DX)
   285 00000268 E85C060000              	call	hide_cursor
   286                                  	; restore regs (ESI, ECX, DX)
   287 0000026D 665A                    	pop	dx
   288 0000026F 89C8                    	mov	eax, ecx
   289                                  	;
   290 00000271 803D[67180000]01        	cmp     byte [dscmd], 1 ; Requested function ?
   291 00000278 0F84DE000000                    je      dscl_17         ; Change sector (F2)
   292 0000027E 0F824F010000                    jb      dscl_ns         ; Change drive (F1)
   293                                  
   294                                  	; Display disk parameters (dscmd = 2)
   295 00000284 80FA02                  	cmp	dl, 2
   296 00000287 7203                    	jb	short dscl_28
   297 00000289 80C27E                  	add	dl, 7Eh
   298                                  dscl_28:
   299                                  	; 28/08/2020
   300 0000028C 803D[67180000]03        	cmp	byte [dscmd], 3
   301 00000293 750A                    	jne	short dscl_dskprm
   302                                  
   303 00000295 E87E0B0000              	call	dskvprm ; disk size and virtual chs parms
   304 0000029A E9F0FEFFFF              	jmp	dscl_esc
   305                                  
   306                                  dscl_dskprm:
   307 0000029F E847080000              	call	dskprm
   308 000002A4 E9E6FEFFFF                      jmp     dscl_esc
   309                                  dscl_12:
   310 000002A9 663DE053                	cmp	ax, DELKey	; DEL key
   311 000002AD 7404                    	je	short dscl_bs
   312 000002AF 3C08                    	cmp	al, BACKSPC	; Backspace key
   313 000002B1 7535                    	jne	short dscl_13
   314                                  dscl_bs:
   315 000002B3 803D[66180000]00        	cmp	byte [txtposoff], 0
   316 000002BA 0F8635FFFFFF                    jna     dscl_3
   317 000002C0 FE0D[66180000]          	dec	byte [txtposoff]
   318 000002C6 FE0D[60180000]          	dec	byte [cursor_posn]
   319 000002CC E8BD140000              	call	set_cpos
   320 000002D1 0FB61D[66180000]        	movzx	ebx, byte [txtposoff]
   321 000002D8 FE0D[66180000]          	dec	byte [txtposoff]
   322 000002DE FE0D[60180000]          	dec	byte [cursor_posn]
   323 000002E4 B020                    	mov	al, 20h
   324 000002E6 EB1B                            jmp     short dscl_14
   325                                  dscl_13:
   326 000002E8 8A1D[66180000]          	mov	bl, [txtposoff]
   327 000002EE 80FB08                  	cmp	bl, 8
   328 000002F1 0F83FEFEFFFF                    jnb     dscl_3
   329                                  	;
   330 000002F7 3C30                    	cmp	al, '0'
   331 000002F9 0F82F6FEFFFF                    jb      dscl_3
   332 000002FF 3C39                    	cmp	al, '9'
   333 00000301 7739                    	ja	short dscl_15
   334                                  dscl_14:
   335 00000303 D0E3                    	shl	bl, 1
   336 00000305 8B35[5C180000]          	mov	esi, [current_txtpos]
   337 0000030B 01F3                    	add	ebx, esi
   338 0000030D 8803                    	mov	[ebx], al
   339                                  	;
   340 0000030F 30FF                    	xor	bh, bh  ; video page 0
   341 00000311 66B90100                	mov	cx, 1	; character count
   342 00000315 B40A                    	mov	ah, 0Ah ; write chr at current cursor pos.
   343 00000317 CD31                    	int	31h     ; TRDOS 386 video interrupt
   344                                  	;
   345 00000319 803D[66180000]08        	cmp	byte [txtposoff], 8
   346 00000320 0F8DCFFEFFFF            	jge	dscl_3 ; JGE !
   347 00000326 FE05[66180000]          	inc	byte [txtposoff]
   348 0000032C FE05[60180000]          	inc	byte [cursor_posn]
   349 00000332 E857140000              	call	set_cpos
   350 00000337 E9B9FEFFFF                      jmp     dscl_3 
   351                                  dscl_15:
   352 0000033C 3C41                    	cmp	al, 'A'
   353 0000033E 0F82B1FEFFFF                    jb      dscl_3
   354 00000344 3C46                    	cmp	al, 'F'
   355 00000346 76BB                            jna     short dscl_14
   356                                  dscl_16:
   357 00000348 3C61                    	cmp	al, 'a'
   358 0000034A 0F82A5FEFFFF                    jb      dscl_3
   359 00000350 3C66                    	cmp	al, 'f'
   360 00000352 0F879DFEFFFF                    ja      dscl_3
   361 00000358 2C20                    	sub	al, 'a' - 'A'
   362 0000035A EBA7                    	jmp	short dscl_14
   363                                  	;
   364                                  dscl_17:
   365 0000035C 8B35[5C180000]          	mov	esi, [current_txtpos]
   366 00000362 31C0                    	xor	eax, eax
   367 00000364 A2[66180000]            	mov	byte [txtposoff], al ; 0
   368 00000369 50                      	push	eax  ; sector value (reset)	
   369                                  dscl_18:
   370 0000036A 66AD                    	lodsw
   371 0000036C 3C30                    	cmp	al, '0'
   372 0000036E 7219                    	jb	short dscl_22
   373                                  dscl_19: 
   374 00000370 29C9                    	sub	ecx, ecx
   375 00000372 BB[8B150000]            	mov	ebx, hexchrs
   376                                  dscl_20:
   377 00000377 3A03                    	cmp	al, [ebx]
   378 00000379 7405                    	je	short dscl_21
   379                                  	;cmp	cl, 15
   380                                  	;jnb	short dscl_22
   381 0000037B FEC1                    	inc	cl
   382 0000037D 43                      	inc	ebx
   383 0000037E EBF7                    	jmp	short dscl_20
   384                                  dscl_21: 
   385 00000380 58                      	pop	eax
   386 00000381 C1E004                  	shl	eax, 4	; * 16
   387 00000384 01C8                    	add	eax, ecx
   388 00000386 50                      	push	eax
   389 00000387 EBE1                    	jmp	short dscl_18
   390                                  dscl_22:
   391 00000389 8A15[9B150000]          	mov	dl, [ds_drv]
   392 0000038F 30F6                    	xor	dh, dh
   393 00000391 58                      	pop	eax
   394 00000392 BE[6C190000]                    mov     esi, sector_buffer
   395 00000397 EB3A                            jmp     short dscl_ns
   396                                  dscl_oh:
   397 00000399 8A15[9B150000]          	mov	dl, [ds_drv]
   398 0000039F 0FB6DA                  	movzx	ebx, dl
   399 000003A2 C0E302                  	shl	bl, 2
   400 000003A5 81C3[50190000]          	add	ebx, ds_sec
   401 000003AB 8B03                    	mov	eax, [ebx]
   402 000003AD BE[6C190000]                    mov     esi, sector_buffer
   403                                  	;
   404 000003B2 8A35[9C150000]          	mov	dh, [ds_drv+1]
   405 000003B8 08F6                    	or	dh, dh
   406 000003BA 7404                    	jz	short dscl_nh ; second half of sector (0->1)
   407 000003BC 30F6                    	xor	dh, dh	      ; reset (0)	
   408 000003BE EB08                    	jmp	short dscl_nx
   409                                  dscl_nh:
   410 000003C0 81C600010000            	add	esi, 256
   411 000003C6 FEC6                    	inc	dh
   412                                  dscl_nx:
   413 000003C8 8835[9C150000]          	mov	[ds_drv+1], dh
   414 000003CE E991000000                      jmp     dscl_25
   415                                  dscl_ns:
   416 000003D3 8835[9C150000]          	mov	[ds_drv+1], dh
   417 000003D9 0FB6DA                  	movzx	ebx, dl
   418 000003DC C0E302                  	shl	bl, 2
   419 000003DF 81C3[50190000]          	add	ebx, ds_sec
   420 000003E5 3A15[9B150000]          	cmp	dl, [ds_drv]
   421 000003EB 7504                    	jne	short dscl_23
   422 000003ED 3B03                    	cmp	eax, [ebx]
   423 000003EF 7473                    	je	dscl_25
   424                                  dscl_23:
   425 000003F1 8A0D[9B150000]          	mov	cl, [ds_drv]
   426 000003F7 880D[172B0000]          	mov	[prev_drv], cl
   427 000003FD 8815[9B150000]          	mov	[ds_drv], dl
   428                                  dscl_26:
   429 00000403 8B0B                    	mov	ecx, [ebx]
   430 00000405 890D[68190000]          	mov	[prev_sec], ecx
   431 0000040B 8903                    	mov	[ebx], eax
   432 0000040D E8A9050000              	call	read_disk_sector
   433 00000412 7336                    	jnc	short dscl_24
   434                                  dscl_rd_err:
   435                                  	;
   436                                  	;mov	al, ah	; error code
   437                                  	;mov	edi, err_code_str
   438                                  	;call	write_hex
   439                                  	;
   440 00000414 BE[DD160000]            	mov	esi, dskr_err ; drive not ready or read error
   441 00000419 E8FA030000              	call	inputbox
   442 0000041E E835010000              	call	getch
   443 00000423 E88A010000              	call	restore_video_page
   444 00000428 0FB61D[172B0000]        	movzx	ebx, byte [prev_drv]
   445 0000042F 881D[9B150000]          	mov	[ds_drv], bl
   446 00000435 C0E302                  	shl	bl, 2
   447 00000438 81C3[50190000]          	add	ebx, ds_sec
   448 0000043E A1[68190000]            	mov	eax, [prev_sec]
   449 00000443 8903                    	mov	[ebx], eax
   450 00000445 E94AFDFFFF                      jmp     dscl_getc
   451                                  dscl_24:
   452 0000044A 668B15[9B150000]        	mov	dx, [ds_drv]
   453 00000451 0FB6DA                  	movzx	ebx, dl
   454 00000454 C0E302                  	shl	bl, 2
   455 00000457 81C3[50190000]          	add	ebx, ds_sec
   456 0000045D 8B03                    	mov	eax, [ebx]
   457 0000045F BE[6C190000]                    mov     esi, sector_buffer
   458                                  dscl_25:
   459 00000464 E865010000              	call	display_sector
   460 00000469 E836010000              	call	save_video_page
   461 0000046E E921FDFFFF                      jmp     dscl_getc
   462                                  dscl_11:
   463 00000473 BE[6C190000]                    mov     esi, sector_buffer
   464 00000478 8A15[9B150000]          	mov	dl, [ds_drv]
   465 0000047E 28F6                    	sub	dh, dh	 ; 0 = first half of sector
   466 00000480 E94EFFFFFF                      jmp     dscl_ns
   467                                  dscl_6:	
   468 00000485 3C20                    	cmp	al, SPACEKey
   469 00000487 0F840CFFFFFF                    je      dscl_oh
   470 0000048D 3C0D                         	cmp	al, ENTERKey
   471 0000048F 0F8404FFFFFF                    je      dscl_oh
   472                                  dscl_29:
   473 00000495 663DE047                	cmp	ax, HOMEKey
   474 00000499 7504                    	jne	short dscl_7
   475 0000049B 31C0                    	xor	eax, eax
   476 0000049D EBD4                    	jmp	short dscl_11
   477                                  dscl_7:
   478 0000049F 663DE04F                	cmp	ax, ENDKey
   479 000004A3 7515                    	jne	short dscl_8
   480 000004A5 0FB61D[9B150000]        	movzx	ebx, byte [ds_drv]
   481 000004AC C0E302                  	shl	bl, 2
   482 000004AF 81C3[98180000]                  add     ebx, drv_size
   483 000004B5 8B03                    	mov	eax, [ebx]
   484 000004B7 48                      	dec	eax
   485 000004B8 EBB9                    	jmp	short dscl_11
   486                                  dscl_8:
   487 000004BA 663DE051                	cmp	ax, PgDnKey
   488 000004BE 753E                    	jne	short dscl_10
   489 000004C0 E810000000              	call	dscl_9
   490 000004C5 40                      	inc	eax
   491 000004C6 39C8                    	cmp	eax, ecx ; last sector
   492 000004C8 0F8605FFFFFF            	jna	dscl_ns
   493 000004CE 31C0                    	xor	eax, eax
   494 000004D0 E92EFFFFFF              	jmp	dscl_26 
   495                                  dscl_9:	
   496 000004D5 0FB615[9B150000]        	movzx	edx, byte [ds_drv]
   497 000004DC 89D3                    	mov	ebx, edx
   498 000004DE C0E302                  	shl	bl, 2  ; *4
   499 000004E1 81C3[98180000]                  add     ebx, drv_size
   500 000004E7 8B0B                    	mov	ecx, [ebx]
   501 000004E9 49                      	dec	ecx
   502 000004EA 81EB[98180000]                  sub     ebx, drv_size
   503 000004F0 81C3[50190000]          	add	ebx, ds_sec ; current sector
   504 000004F6 8B03                    	mov	eax, [ebx]	
   505 000004F8 BE[6C190000]                    mov     esi, sector_buffer
   506 000004FD C3                              retn
   507                                  dscl_10:
   508 000004FE 663DE049                	cmp	ax, PgUpKey
   509 00000502 0F858CFCFFFF                    jne     dscl_getc
   510 00000508 E8C8FFFFFF              	call	dscl_9
   511 0000050D 48                      	dec	eax
   512 0000050E 39C8                    	cmp	eax, ecx ; last sector
   513 00000510 0F86BDFEFFFF            	jna	dscl_ns
   514 00000516 89C8                    	mov	eax, ecx
   515 00000518 E9E6FEFFFF              	jmp	dscl_26
   516                                  
   517                                  dscl_exit:
   518                                  	;
   519                                  	; Stop timer event
   520 0000051D 0FB61D[142B0000]        	movzx	ebx, byte [timer_event_number]
   521                                  		; bh = 0 -> stop timer event
   522                                  
   523 00000524 20DB                    	and	bl, bl
   524 00000526 7409                    	jz	short dscl_rvp
   525 00000528 B821000000              	mov	eax, 33	; 'systimer'
   526 0000052D CD40                    	int	40h	; TRDOS 386 system call
   527                                  
   528 0000052F 28DB                    	sub	bl, bl
   529                                  dscl_rvp:
   530                                  	; Restore video page (before displaying sector)
   531                                  
   532                                  	; copy video page 6 to video page 0
   533                                  	;sub	ebx, ebx ; bl = 0 -> system to system
   534                                  			 ; bh = 0 -> 80*25 text mode 
   535 00000531 B106                    	mov	cl, 6    ; source = video page 6
   536                                  
   537 00000533 E87E000000              	call	restore_v_pg_x
   538                                  
   539                                  	; Restore cursor position
   540 00000538 668B15[64180000]        	mov	dx, [cursor_posb] 
   541                                  	;
   542                                  	; Set cursor position
   543                                  	;xor	bh, bh  ; Video page 0
   544 0000053F B402                    	mov	ah, 2	; set cursor position
   545 00000541 CD31                    	int	31h 	; TRDOS 386 video interrupt
   546                                  	
   547                                  	; Show standard blinking text cursor 
   548 00000543 668B0D[62180000]                mov 	cx, [cursor_shp]
   549 0000054A B401                    	mov	ah, 1	; set cursor type
   550 0000054C CD31                    	int	31h 	; TRDOS 386 video interrupt
   551                                  
   552                                  terminate:
   553 0000054E B801000000              	mov	eax, 1	; 'sysexit'
   554 00000553 CD40                    	int	40h	; TRDOS 386 system call
   555                                  haltsys:
   556 00000555 F4                      	hlt
   557 00000556 EBFD                    	jmp	short haltsys
   558                                  
   559                                  getch:
   560                                  dscl_rtc_p:
   561 00000558 803D[5B180000]00        	cmp	byte [timer_event], 0
   562 0000055F 7638                    	jna	short dscl_getch
   563                                  
   564                                  	; timer function
   565 00000561 C605[5B180000]00        	mov	byte [timer_event], 0
   566                                  		
   567 00000568 BF[641C0000]            	mov	edi, video_buffer + 0A0h + 50h ; Row 1, Column 40
   568 0000056D 807F013F                	cmp     byte [edi+1], 3Fh ; cyan (3) Background
   569                                  			; white (F) forecolor 
   570                                  			; (display disk sector frame)
   571 00000571 752C                    	jne	short dscl_getchar
   572                                  
   573 00000573 51                      	push	ecx
   574 00000574 52                      	push	edx
   575                                  
   576 00000575 E8F3010000              	call	rtc_p
   577                                  
   578                                  	; print real time clock content (as formatted)
   579                                  	; to video page line 1, column 40
   580 0000057A BE[641C0000]            	mov	esi, video_buffer + 0A0h + 50h
   581 0000057F B928000100              	mov	ecx, 10028h ; row 1, column 40 (top left)
   582 00000584 BA4E000100                      mov     edx, 10028h + rtc_msg_end - rtc_msg ; (bottom right)
   583                                  			    ; row 1, column 40 + rtc_msg lenth 
   584 00000589 29FF                    	sub	edi, edi ; no swap
   585 0000058B BB05000000              	mov	ebx, 5  ; user to system window transfer (active page)
   586 00000590 B81F000000              	mov	eax, 31 ; 'sysvideo'
   587 00000595 CD40                    	int	40h	; TRDOS 386 system call	
   588                                  
   589 00000597 5A                      	pop	edx
   590 00000598 59                      	pop	ecx
   591                                  	
   592                                  dscl_getch:
   593                                  	; Check keyboard buffer
   594 00000599 B411                    	mov	ah, 11h
   595 0000059B CD32                    	int 	32h ; TRDOS 386 keyboard interrupt
   596                                  		    ; (IBM PC/AT ROMBIOS, INT 16h)			
   597 0000059D 74B9                    	jz	short dscl_rtc_p ; keyboard buffer empty
   598                                  
   599                                  dscl_getchar:
   600                                  	; Getchar by using keyboard interrupt
   601 0000059F B410                    	mov	ah, 10h
   602 000005A1 CD32                    	int 	32h ; TRDOS 386 keyboard interrupt
   603                                  		    ; (IBM PC/AT ROMBIOS, INT 16h)			
   604 000005A3 C3                      	retn
   605                                  		
   606                                  save_video_page:
   607                                  	; Save video page
   608                                  
   609                                  	; copy video page 0 to video page 7
   610 000005A4 29DB                    	sub	ebx, ebx ; bl = 0 -> system to system
   611                                  			 ; bh = 0 -> 80*25 text mode 
   612 000005A6 28C9                    	sub	cl, cl   ; source = video page 0
   613 000005A8 B207                    	mov	dl, 7    ; destination = video page 7
   614 000005AA B81F000000              	mov	eax, 31  ; 'sysvideo'
   615 000005AF CD40                    	int	40h	 ; TRDOS 386 system call
   616                                  
   617 000005B1 C3                      	retn  
   618                                  
   619                                  restore_video_page:
   620                                  	; copy video page 7 to video page 0
   621 000005B2 29DB                    	sub	ebx, ebx ; bl = 0 -> system to system
   622                                  			 ; bh = 0 -> 80*25 text mode 
   623 000005B4 B107                    	mov	cl, 7    ; source = video page 7
   624                                  
   625                                  restore_v_pg_x:
   626 000005B6 28D2                    	sub	dl, dl   ; destination = video page 0
   627 000005B8 B81F000000              	mov	eax, 31  ; 'sysvideo'
   628 000005BD CD40                    	int	40h	 ; TRDOS 386 system call  
   629                                  
   630 000005BF B302                    	mov	bl, 2	 ; system to user
   631                                  	;xor	dl, dl   ; video page 0
   632 000005C1 B9[741B0000]            	mov	ecx, video_buffer ; user buffer
   633 000005C6 B81F000000              	mov	eax, 31	 ; 'sysvideo'
   634 000005CB CD40                     	int	40h	 ; TRDOS 386 system call  
   635                                  	
   636 000005CD C3                      	retn
   637                                  	
   638                                  display_sector:
   639                                  	; display disk sector data (on video page 0)
   640                                  	;
   641                                  	; INPUT ->
   642                                  	;	ESI = sector buffer offset
   643                                  	; 	      (sector size: 512 bytes)
   644                                  	;	EAX = sector number
   645                                  	;	DL = drive number (0,1,2,3,4,5,6)
   646                                  	;	DH = portion control byte 
   647                                  	;		 (0= first half of the sector, 
   648                                  	;		 >0= second half of the sector) 
   649                                  	; OUTPUT ->
   650                                  	;	Video page 0 (0B8000h) will be filled
   651                                  	;	with sector data
   652                                  	;	(ESI points to byte 256 of the buffer
   653                                  	;	or end of the buffer)	
   654                                  	;
   655                                  	; Modified registers: eax, edx, ecx, ebx, esi, edi
   656                                  	;
   657                                  	;
   658                                  	;xor	ecx, ecx ; reset for cx loop counts
   659 000005CE C605[68180000]01        	mov	byte [inds], 1 ; for ENTER key handling 
   660                                  	;
   661 000005D5 50                      	push	eax
   662 000005D6 52                      	push	edx
   663 000005D7 E820010000              	call	clear_frame
   664 000005DC 5A                      	pop	edx
   665 000005DD 58                      	pop	eax
   666                                  dsfh:
   667 000005DE 31DB                    	xor	ebx, ebx
   668 000005E0 08F6                    	or	dh, dh
   669 000005E2 7402                    	jz	short dsfh1
   670 000005E4 B310                    	mov	bl, 10h
   671                                  dsfh1:
   672 000005E6 881D[69180000]          	mov	[paragr], bl	; Paragraph (16 bytes)
   673                                  	;
   674 000005EC 88D3                    	mov	bl, dl
   675 000005EE C0E302                  	shl	bl, 2	; *4
   676 000005F1 81C3[9D150000]          	add	ebx, drv_names
   677 000005F7 8B13                    	mov	edx, [ebx]
   678 000005F9 8915[BE150000]          	mov	[drv_name], edx
   679 000005FF E8BF000000              	call	dwordtohex
   680 00000604 8915[CC150000]          	mov	[sector_num], edx
   681 0000060A A3[D0150000]            	mov	[sector_num+4], eax
   682 0000060F B001                    	mov	al, 1
   683 00000611 B43F                    	mov	ah, 3Fh ; cyan background, white forecolor
   684 00000613 BB[B5150000]            	mov	ebx, dpheader
   685 00000618 E8CC000000              	call	print_line
   686 0000061D B015                    	mov	al, 21
   687                                  	;mov	ah, 3Fh ; cyan background, white forecolor
   688 0000061F BB[26160000]            	mov	ebx, dpfooter1
   689 00000624 E8C0000000              	call	print_line
   690 00000629 B016                    	mov	al, 22
   691                                  	;mov	ah, 3Fh ; cyan background, white forecolor
   692 0000062B BB[70160000]            	mov	ebx, dpfooter2
   693 00000630 E8B4000000              	call	print_line
   694                                  ds1:
   695 00000635 B910000000              	mov	ecx, 16
   696                                  ds2:
   697 0000063A A0[69180000]            	mov	al, [paragr]
   698 0000063F E841000000              	call	bytetohex
   699 00000644 66A3[DC150000]          	mov	[sdline_1], ax
   700                                  	;
   701 0000064A 51                      	push	ecx
   702 0000064B B110                    	mov	cl, 16
   703 0000064D BF[E4150000]            	mov	edi, sdline_2
   704                                  ds3:
   705 00000652 AC                      	lodsb	
   706 00000653 E82D000000              	call	bytetohex
   707 00000658 66AB                    	stosw
   708 0000065A 47                      	inc	edi
   709 0000065B E2F5                    	loop	ds3
   710 0000065D 83EE10                  	sub	esi, 16
   711 00000660 47                      	inc	edi
   712 00000661 B110                    	mov	cl, 16
   713 00000663 F3A4                    	rep	movsb
   714 00000665 59                      	pop	ecx
   715 00000666 B013                    	mov	al, 19	; line (row) 3 to 24
   716 00000668 28C8                    	sub	al, cl
   717 0000066A B407                    	mov	ah, 07h ; Black background, light gray forecolor
   718 0000066C BB[D6150000]            	mov	ebx, sdline
   719 00000671 E85F000000              	call	print_line_80 ; 04/12/2014
   720 00000676 E205                    	loop	ds4
   721                                  	
   722                                  	;call	video_page_update
   723                                  	;retn
   724                                  
   725 00000678 E9B8000000              	jmp	video_page_update
   726                                  ds4:
   727 0000067D FE05[69180000]          	inc	byte [paragr]
   728 00000683 EBB5                    	jmp	short ds2
   729                                  
   730                                  ; Convert binary number to hexadecimal string
   731                                  
   732                                  bytetohex:
   733                                  	; INPUT ->
   734                                  	; 	AL = byte (binary number)
   735                                  	; OUTPUT ->
   736                                  	;	AX = hexadecimal string
   737                                  	;
   738 00000685 53                      	push	ebx
   739 00000686 0FB6D8                  	movzx	ebx, al
   740 00000689 C0EB04                  	shr	bl, 4
   741 0000068C 8A9B[8B150000]          	mov	bl, [ebx+hexchrs] 	 	
   742 00000692 86D8                    	xchg	bl, al
   743 00000694 80E30F                  	and	bl, 0Fh
   744 00000697 8AA3[8B150000]          	mov	ah, [ebx+hexchrs] 
   745 0000069D 5B                      	pop	ebx	
   746 0000069E C3                      	retn
   747                                  
   748                                  wordtohex:
   749                                  	; INPUT ->
   750                                  	; 	AX = word (binary number)
   751                                  	; OUTPUT ->
   752                                  	;	EAX = hexadecimal string
   753                                  	;
   754 0000069F 53                      	push	ebx
   755 000006A0 86E0                    	xchg	ah, al
   756 000006A2 6650                    	push	ax
   757 000006A4 0FB6DC                  	movzx	ebx, ah
   758 000006A7 C0EB04                  	shr	bl, 4
   759 000006AA 8A83[8B150000]          	mov	al, [ebx+hexchrs] 	 	
   760 000006B0 88E3                    	mov	bl, ah
   761 000006B2 80E30F                  	and	bl, 0Fh
   762 000006B5 8AA3[8B150000]          	mov	ah, [ebx+hexchrs]
   763 000006BB C1E010                  	shl	eax, 16
   764 000006BE 6658                    	pop	ax
   765 000006C0 5B                      	pop	ebx
   766 000006C1 EBC2                    	jmp	short bytetohex
   767                                  	;mov	bl, al
   768                                  	;shr	bl, 4
   769                                  	;mov	bl, [ebx+hexchrs] 	 	
   770                                  	;xchg	bl, al	 	
   771                                  	;and	bl, 0Fh
   772                                  	;mov	ah, [ebx+hexchrs] 
   773                                  	;pop	ebx	
   774                                  	;retn
   775                                  
   776                                  dwordtohex:
   777                                  	; INPUT ->
   778                                  	; 	EAX = dword (binary number)
   779                                  	; OUTPUT ->
   780                                  	;	EDX:EAX = hexadecimal string
   781                                  	;
   782 000006C3 50                      	push	eax
   783 000006C4 C1E810                  	shr	eax, 16
   784 000006C7 E8D3FFFFFF              	call	wordtohex
   785 000006CC 89C2                    	mov	edx, eax
   786 000006CE 58                      	pop	eax
   787 000006CF E8CBFFFFFF              	call	wordtohex
   788 000006D4 C3                      	retn
   789                                  
   790                                  print_line_80:
   791                                  	; 04/12/2014
   792                                  	; al = line (0 to 24)
   793                                  	; ah = color attributes
   794                                  	; ebx = 80 chars string address	
   795 000006D5 E881000000              	call 	get_lpos
   796 000006DA 51                      	push	ecx
   797 000006DB B950000000              	mov	ecx, 80
   798                                  pl80:
   799 000006E0 8A03                    	mov	al, [ebx]
   800 000006E2 43                      	inc	ebx
   801 000006E3 66AB                    	stosw
   802 000006E5 E2F9                    	loop	pl80
   803 000006E7 59                      	pop	ecx
   804 000006E8 C3                      	retn
   805                                  
   806                                  print_line:
   807                                  	; al = line (0 to 24)
   808                                  	; ah = color attributes	
   809                                  	; ebx = ASCIIZ string address
   810 000006E9 E86D000000              	call	get_lpos
   811 000006EE 56                      	push	esi
   812 000006EF 89DE                    	mov	esi, ebx
   813                                  prl1:
   814 000006F1 AC                      	lodsb
   815 000006F2 20C0                    	and	al, al
   816 000006F4 7404                    	jz	short prl2
   817 000006F6 66AB                    	stosw
   818 000006F8 EBF7                    	jmp	short prl1
   819                                  prl2:
   820 000006FA 5E                      	pop	esi
   821 000006FB C3                      	retn
   822                                  
   823                                  clear_frame:
   824 000006FC 30C0                    	xor	al, al ; Line 0
   825 000006FE E846000000              	call	clear_line
   826 00000703 B001                    	mov	al, 1
   827 00000705 B43F                    	mov	ah, 3Fh ; cyan background, white forecolor
   828 00000707 E83F000000              	call	fill_color
   829 0000070C B001                    	mov	al, 1
   830                                  dscf0:	
   831 0000070E FEC0                    	inc	al
   832 00000710 6650                    	push	ax
   833 00000712 E832000000              	call	clear_line
   834 00000717 6658                    	pop	ax
   835 00000719 3C13                    	cmp	al, 19
   836 0000071B 72F1                    	jb	short dscf0
   837                                  	;inc	al ; line 20
   838 0000071D B43F                    	mov	ah, 3Fh
   839                                  dscf1:
   840 0000071F FEC0                    	inc	al
   841 00000721 6650                    	push	ax
   842 00000723 E823000000              	call	fill_color	  
   843 00000728 6658                    	pop	ax
   844 0000072A 3C17                    	cmp	al, 23
   845 0000072C 72F1                    	jb	short dscf1
   846 0000072E FEC0                    	inc	al
   847 00000730 E814000000              	call	clear_line
   848                                  
   849                                  	;call	video_page_update
   850                                  	;retn
   851                                  
   852                                  video_page_update:
   853                                  	; copy video buffer content to video page 0
   854 00000735 BB01000000              	mov	ebx, 1	; BL = 1 = user to system
   855 0000073A B200                    	mov	dl, 0	; video page 0
   856 0000073C B9[741B0000]            	mov	ecx, video_buffer
   857 00000741 B81F000000              	mov	eax, 31 ; 'sysvideo'
   858 00000746 CD40                    	int	40h	; TRDOS 386 system call	
   859 00000748 C3                      	retn
   860                                  
   861                                  clear_line:
   862 00000749 30E4                    	xor	ah, ah ; blank
   863                                  fill_color:
   864                                  	; al = line (0 to 24)
   865                                  	; ah = color attributes
   866 0000074B E80B000000              	call	get_lpos
   867 00000750 B950000000              	mov	ecx, 80
   868 00000755 B020                    	mov	al, 20h ; space/blank
   869 00000757 F366AB                  	rep	stosw
   870 0000075A C3                      	retn
   871                                  
   872                                  get_lpos:  ; Get line position in video buffer
   873 0000075B 6650                    	push	ax
   874 0000075D B4A0                    	mov	ah, 80*2
   875 0000075F F6E4                    	mul	ah
   876 00000761 0FB7F8                  	movzx	edi, ax
   877 00000764 81C7[741B0000]          	add	edi, video_buffer
   878 0000076A 6658                    	pop	ax
   879 0000076C C3                      	retn
   880                                  
   881                                  rtc_p:	
   882                                  	; Print Real Time Clock content
   883                                  	;
   884 0000076D B404                    	mov	ah, 4	; read the date
   885 0000076F CD35                    	int	35h	; TRDOS 386 date&time interrupt
   886                                  			; (IBM PC/AT ROMBIOS, INT 1Ah)
   887                                  	;mov	[date_day], dl
   888                                  	;mov	[date_month], dh
   889 00000771 668915[6C1B0000]        	mov	[date_day], dx
   890                                  	;mov	[date_year], cl
   891                                  	;mov	[date_century], ch
   892 00000778 66890D[6E1B0000]        	mov	[date_year], cx
   893                                  	;
   894 0000077F B402                    	mov	ah, 2	; read the time
   895 00000781 CD35                    	int	35h	; TRDOS 386 date&time interrupt
   896 00000783 8835[701B0000]                  mov     [time_second], dh
   897                                          ;mov    [time_minute], cl
   898                                          ;mov    [time_hour], ch
   899 00000789 66890D[711B0000]                mov     [time_minute], cx
   900                                  	;
   901 00000790 A0[6F1B0000]            	mov	al, [date_century]
   902 00000795 E875000000              	call	bcd_to_ascii
   903 0000079A 66A3[4C180000]          	mov	word [datestr+6], ax
   904 000007A0 A0[6E1B0000]            	mov	al, byte [date_year]
   905 000007A5 E865000000              	call	bcd_to_ascii
   906 000007AA 66A3[4E180000]          	mov	word [datestr+8], ax
   907 000007B0 A0[6D1B0000]            	mov	al, byte [date_month]
   908 000007B5 E855000000              	call	bcd_to_ascii
   909 000007BA 66A3[49180000]          	mov	word [datestr+3], ax
   910 000007C0 A0[6C1B0000]            	mov	al, byte [date_day]
   911 000007C5 E845000000              	call	bcd_to_ascii
   912 000007CA 66A3[46180000]          	mov	word [datestr], ax
   913                                  	;
   914 000007D0 A0[721B0000]                    mov     al, byte [time_hour]
   915 000007D5 E835000000              	call	bcd_to_ascii
   916 000007DA 66A3[52180000]          	mov	word [timestr], ax
   917 000007E0 A0[711B0000]                    mov     al, byte [time_minute]
   918 000007E5 E825000000              	call	bcd_to_ascii
   919 000007EA 66A3[55180000]          	mov	word [timestr+3], ax
   920 000007F0 A0[701B0000]                    mov     al, byte [time_second]
   921 000007F5 E815000000              	call	bcd_to_ascii
   922 000007FA 66A3[58180000]          	mov	word [timestr+6], ax
   923                                  	;		
   924 00000800 BE[34180000]            	mov	esi, rtc_msg ; message offset
   925                                  	;
   926                                  	;mov	edi, video_buffer + 0A0h + 050h ; Row 1, Column 40
   927                                  	;mov	ah, [edi+1]
   928                                  	;cmp	ah, 3Fh ; cyan (3) Background
   929                                  			; white (F) forecolor 
   930                                  			; (display disk sector frame)
   931                                  	;jne	short prtcmsg_ok	
   932                                  prtcmsg:
   933 00000805 AC                      	lodsb
   934 00000806 08C0                    	or	al, al
   935 00000808 7404                    	jz	short prtcmsg_ok
   936 0000080A AA                      	stosb
   937 0000080B 47                      	inc 	edi
   938 0000080C EBF7                    	jmp	short prtcmsg
   939                                  prtcmsg_ok:
   940 0000080E C3                      	retn
   941                                  
   942                                  bcd_to_ascii:
   943                                  	; INPUT ->
   944                                  	;	AL = Packed BCD number
   945                                  	; OUTPUT ->
   946                                  	;	AX = ASCII word/number
   947                                  	;
   948 0000080F D410                    	db	0D4h, 10h	; Undocumented inst. AAM
   949                                  				; AH = AL / 10h
   950                                  				; AL = AL MOD 10h
   951 00000811 660D3030                	or	ax, '00'	; Make it ASCII based
   952                                  
   953 00000815 86E0                            xchg	ah, al 
   954                                  	
   955 00000817 C3                      	retn	
   956                                  
   957                                  inputbox:
   958                                  	; Show an input box for user/keyboard input
   959                                  	; INPUT ->
   960                                  	;	ESI = input structure address 
   961                                  	; OUTPUT ->
   962                                  	;	DX  = cursor position for input
   963                                  	;	input box will be displayed (on tty0)
   964                                  	;
   965                                  	; Modified registers: eax, ebx, ecx, edx, esi, edi
   966                                  
   967 00000818 C605[68180000]00        	mov	byte [inds], 0 ; for ENTER key handling
   968 0000081F 31C9                    	xor	ecx, ecx
   969 00000821 BB[741B0000]            	mov	ebx, video_buffer
   970 00000826 B818500000              	mov	eax, 5018h ; 80, 24
   971 0000082B 668B16                  	mov	dx, [esi] ; box width (dl)
   972                                  			  ; box height (dh)
   973 0000082E 28F0                    	sub	al, dh
   974 00000830 D0E8                    	shr	al, 1
   975 00000832 A2[6B180000]            	mov	[ibcp+1], al ; row
   976 00000837 F6E4                    	mul	ah
   977 00000839 66D1E0                  	shl	ax, 1  ; char + attribute
   978 0000083C 01C3                    	add	ebx, eax
   979 0000083E B050                    	mov	al, 80
   980 00000840 28D0                    	sub	al, dl
   981 00000842 D0E8                    	shr	al, 1 
   982 00000844 A2[6A180000]            	mov	[ibcp], al ; column
   983 00000849 D0E0                    	shl	al, 1  ; char + attribute
   984 0000084B 28E4                    	sub	ah, ah
   985 0000084D 01C3                    	add	ebx, eax
   986 0000084F 8A6605                  	mov	ah, [esi+5] ; color attributes
   987 00000852 B020                    	mov	al, 20h	; space/blank
   988 00000854 88F1                    	mov	cl, dh ; height
   989                                  ib0:
   990 00000856 51                      	push	ecx
   991 00000857 88D1                    	mov	cl, dl
   992 00000859 89DF                    	mov	edi, ebx	
   993 0000085B F366AB                  	rep	stosw
   994 0000085E 59                      	pop	ecx
   995 0000085F 81C3A0000000            	add	ebx, 80*2 ; number of columns * 2
   996 00000865 E2EF                    	loop	ib0
   997                                  	;
   998 00000867 BF[741B0000]            	mov	edi, video_buffer
   999 0000086C A0[6B180000]            	mov	al, [ibcp+1] ; row position
  1000 00000871 024602                  	add	al, [esi+2] ; label offset (row)
  1001 00000874 A2[6B180000]            	mov	[ibcp+1], al
  1002 00000879 B4A0                    	mov	ah, 80*2
  1003 0000087B F6E4                    	mul	ah
  1004 0000087D 01C7                    	add	edi, eax
  1005 0000087F A0[6A180000]            	mov	al, [ibcp] ; column position
  1006 00000884 024603                  	add	al, [esi+3] ; label offset (column)
  1007 00000887 A2[6A180000]            	mov	[ibcp], al
  1008 0000088C 30E4                    	xor	ah, ah
  1009 0000088E D0E0                    	shl	al, 1
  1010 00000890 01C7                    	add	edi, eax
  1011 00000892 89F3                    	mov	ebx, esi
  1012 00000894 83C606                  	add	esi, 6 ; Label offset
  1013                                  ib2:
  1014 00000897 AC                      	lodsb
  1015 00000898 08C0                    	or	al, al
  1016 0000089A 7406                    	jz	short ib3
  1017 0000089C AA                      	stosb
  1018 0000089D 47                      	inc 	edi	
  1019 0000089E FEC1                    	inc	cl
  1020 000008A0 EBF5                    	jmp	short ib2
  1021                                  ib3:
  1022 000008A2 000D[6A180000]          	add	[ibcp], cl ; column position
  1023 000008A8 893D[5C180000]          	mov	[current_txtpos], edi
  1024                                  	;
  1025 000008AE 8A4B04                  	mov	cl, [ebx+4] ; input char count
  1026 000008B1 08C9                    	or	cl, cl
  1027 000008B3 7407                    	jz	short ib5 ; message box (no input)	
  1028 000008B5 B020                    	mov	al, 20h
  1029 000008B7 B407                    	mov	ah, 07h ; black background
  1030                                  			; light gray fore color	
  1031                                  ib4:
  1032 000008B9 F366AB                  	rep	stosw
  1033                                  ib5:	
  1034 000008BC E874FEFFFF              	call	video_page_update
  1035 000008C1 668B15[6A180000]        	mov	dx, [ibcp] ; cursor position
  1036 000008C8 C3                      	retn
  1037                                  
  1038                                  hide_cursor:
  1039                                        	;CH = cursor start line (bits 0-4) 
  1040                                  	;     and options (bits 5-7).
  1041                                  	;CL = bottom cursor line (bits 0-4).
  1042                                  	; when bit 5 of CH is set to 0, the cursor is visible. 
  1043                                  	; when bit 5 is 1, the cursor is not visible. 
  1044                                  	; hide blinking text cursor: 
  1045 000008C9 51                              push	ecx
  1046 000008CA B520                    	mov 	ch, 32
  1047 000008CC 30FF                    	xor	bh, bh ; video page 0
  1048 000008CE EB0F                    	jmp	short hc_sc
  1049                                  
  1050                                  show_cursor:
  1051                                    	; dh = row
  1052                                  	; dl = column
  1053 000008D0 51                      	push	ecx
  1054 000008D1 668915[60180000]        	mov	[cursor_posn], dx
  1055 000008D8 E8B80E0000              	call	set_cposx
  1056                                  	;
  1057                                  	;show box-shaped blinking text cursor
  1058 000008DD B50D                    	mov	ch, 13
  1059                                  hc_sc:
  1060 000008DF B10F                            mov 	cl, 15
  1061 000008E1 B401                            mov 	ah, 1
  1062 000008E3 CD31                            int 	31h
  1063 000008E5 59                      	pop	ecx
  1064 000008E6 C3                      	retn
  1065                                  
  1066                                  set_disk_parms:
  1067                                  	; 26/08/2020
  1068 000008E7 8A15[6D180000]          	mov	dl, [drv]
  1069 000008ED 80FA80                  	cmp	dl, 80h
  1070 000008F0 7249                    	jb	short set_disk_parms_fd ; floppy
  1071 000008F2 2401                    	and	al, 1  ; LBA ready ?
  1072 000008F4 7451                    	jz	short set_disk_parms_chs
  1073                                  set_disk_parms_lba:
  1074                                  	; 28/08/2020
  1075                                  	;; Translated FDPT
  1076                                  	;mov	ax, [ebx+9]  ; physical cylinders
  1077                                  	;mov	dh, [ebx+11] ; physical heads
  1078                                  	;mov	cl, [ebx+4]  ; physical sectors per track 
  1079                                  	;jmp	short sdp0
  1080                                  
  1081                                  	; 28/08/2020 
  1082                                  	; TRDOS 386 kernel, INT 33h, Function 15h modification
  1083                                  	; (Read DASD type) get disk size function return:
  1084                                  	; ah = 03h (eax = 300h)
  1085                                  	; cx:dx = disk size (LBA disk dize)
  1086                                  	
  1087 000008F6 B415                    	mov	ah, 15h
  1088                                  	;;sub	al, al
  1089                                  	;mov	dl, [drv]
  1090 000008F8 CD33                    	int	33h
  1091                                  	;jnc	short set_disk_parms_lba_exact
  1092                                  
  1093                                  	;; Translated FDPT
  1094                                  	;mov	ax, [ebx+9]  ; physical cylinders
  1095                                  	;mov	dh, [ebx+11] ; physical heads
  1096                                  	;mov	cl, [ebx+4]  ; physical sectors per track 
  1097                                  	;mov	dl, [drv]
  1098                                  	;jmp	short sdp0
  1099                                  
  1100                                  ;set_disk_parms_lba_exact
  1101                                  	; 28/08/2020
  1102 000008FA 6689C8                  	mov	ax, cx ; hw of disk size
  1103 000008FD C1E010                  	shl	eax, 16
  1104 00000900 6689D0                  	mov	ax, dx ; lw of disk size
  1105 00000903 0FB61D[6D180000]        	movzx	ebx, byte [drv] ; physical disk drive number
  1106 0000090A 80EB7E                  	sub	bl, 07Eh ; hd0 = 2
  1107 0000090D C0E302                  	shl	bl, 2 ; * 4
  1108 00000910 8983[98180000]          	mov	[ebx+drv_size], eax ; 32 bit LBA disk size
  1109 00000916 D0EB                    	shr	bl, 1 ; / 2
  1110 00000918 66C783[80180000]FF-     	mov	word [ebx+drv_heads], 255 ; virtual heads
  1110 00000920 00                 
  1111 00000921 66C783[8C180000]3F-     	mov	word [ebx+drv_spt], 63 ; virtual sectors per track
  1111 00000929 00                 
  1112 0000092A B9C13E0000              	mov	ecx, 16065 ; 255*63	
  1113 0000092F 31D2                    	xor	edx, edx
  1114 00000931 F7F1                    	div	ecx
  1115                                  	; eax = ax = cylinders
  1116 00000933 668983[74180000]        	mov	[ebx+drv_cylinders], ax
  1117 0000093A C3                      	retn
  1118                                  
  1119                                  set_disk_parms_fd:
  1120                                  	;mov	al, ch ; last cylinder (bits 0-7)
  1121                                  	;mov	ah, cl ; 
  1122                                  	;shr	ah, 6  ; last cylinder (bits 8-9)
  1123 0000093B 6640                    	inc	ax  ; convert max. cyl number to cyl count
  1124 0000093D 88E8                    	mov	al, ch
  1125 0000093F FEC0                    	inc	al
  1126 00000941 28E4                    	sub	ah, ah
  1127 00000943 FEC6                    	inc	dh  ; convert last head to heads
  1128                                  	;and	cl, 63 ; sectors per track
  1129 00000945 EB09                    	jmp	short sdp0  
  1130                                  
  1131                                  set_disk_parms_chs:
  1132                                  	; Standard FDPT
  1133 00000947 668B03                  	mov	ax, [ebx]  ; physical cylinders
  1134 0000094A 8A7302                  	mov	dh, [ebx+2] ; physical heads
  1135 0000094D 8A4B0E                  	mov	cl, [ebx+14] ; physical sectors per track 
  1136                                  sdp0:
  1137 00000950 0FB6DA                  	movzx   ebx, dl
  1138 00000953 80FB80                  	cmp	bl, 80h
  1139 00000956 7203                    	jb	short sdp1
  1140 00000958 80EB7E                  	sub	bl, 7Eh
  1141                                  sdp1:	
  1142 0000095B D0E3                    	shl	bl, 1
  1143 0000095D 81C3[74180000]          	add	ebx, drv_cylinders
  1144 00000963 668903                  	mov	[ebx], ax
  1145 00000966 6650                    	push	ax ; ** cylinders
  1146 00000968 81EB[74180000]          	sub	ebx, drv_cylinders
  1147 0000096E 81C3[80180000]          	add	ebx, drv_heads
  1148 00000974 88F0                    	mov	al, dh ; heads
  1149 00000976 30E4                    	xor	ah, ah
  1150 00000978 668903                  	mov	[ebx], ax
  1151 0000097B 81EB[80180000]          	sub     ebx, drv_heads
  1152 00000981 81C3[8C180000]          	add     ebx, drv_spt
  1153 00000987 6683E13F                	and	cx, 3Fh  ; sectors (bits 0-6)
  1154 0000098B 66890B                  	mov	[ebx], cx ; sectors per track
  1155 0000098E 81EB[8C180000]          	sub     ebx, drv_spt
  1156 00000994 66D1E3                  	shl	bx, 1
  1157 00000997 81C3[98180000]          	add	ebx, drv_size ; disk size (in sectors)
  1158                                  	; LBA size = cylinders * heads * secpertrack
  1159 0000099D 66F7E1                  	mul	cx 
  1160 000009A0 6689C2                  	mov	dx, ax ; heads*spt					
  1161 000009A3 6658                    	pop	ax ; ** cylinders
  1162 000009A5 803D[6D180000]80        	cmp	byte [drv], 80h
  1163 000009AC 7202                    	jb	short sdp2
  1164 000009AE 6648                    	dec	ax ; 1 cylinder reserved (!?)
  1165                                  sdp2:
  1166 000009B0 66F7E2                  	mul	dx ; cylinders * (heads*spt)		
  1167 000009B3 668903                  	mov	[ebx], ax
  1168 000009B6 66895302                	mov	[ebx+2], dx
  1169                                  	;
  1170 000009BA C3                      	retn	
  1171                                  
  1172                                  ;set_disk_parms
  1173                                  ;	movzx   ebx, byte [drv]
  1174                                  ;	cmp	bl, 80h
  1175                                  ;	jb	short sdp0
  1176                                  ;	sub	bl, 7Eh
  1177                                  ;sdp0:	
  1178                                  ;	;add	ebx, drv_status
  1179                                  ;	;mov     byte [ebx], 80h ; 'Present' flag
  1180                                  ;	;
  1181                                  ;	mov	al, ch ; last cylinder (bits 0-7)
  1182                                  ;	mov	ah, cl ; 
  1183                                  ;	shr	ah, 6  ; last cylinder (bits 8-9)
  1184                                  ;	;sub	ebx, drv_status
  1185                                  ;	shl	bl, 1
  1186                                  ;	add	ebx, drv_cylinders
  1187                                  ;	inc	ax  ; convert max. cyl number to cyl count		
  1188                                  ;	mov	[ebx], ax
  1189                                  ;	push	ax ; ** cylinders
  1190                                  ;	sub	ebx, drv_cylinders
  1191                                  ;	add	ebx, drv_heads
  1192                                  ;	mov	al, dh ; last head number
  1193                                  ;	xor	ah, ah
  1194                                  ;	inc	ax     ; heads 	
  1195                                  ;	mov	[ebx], ax
  1196                                  ;	sub     ebx, drv_heads
  1197                                  ;	add     ebx, drv_spt
  1198                                  ;	and	cx, 3Fh  ; sectors (bits 0-6)
  1199                                  ;	mov	[ebx], cx
  1200                                  ;	sub     ebx, drv_spt
  1201                                  ;	shl	bx, 1
  1202                                  ;	add	ebx, drv_size ; disk size (in sectors)
  1203                                  ;	; LBA size = cylinders * heads * secpertrack
  1204                                  ;	mul	cx 
  1205                                  ;	mov	dx, ax ; heads*spt					
  1206                                  ;	pop	ax ; ** cylinders
  1207                                  ;	cmp	byte [drv], 80h
  1208                                  ;	jb	short sdp1
  1209                                  ;	dec	ax ; 1 cylinder reserved (!?)
  1210                                  ;sdp1:
  1211                                  ;	mul	dx ; cylinders * (heads*spt)		
  1212                                  ;	mov	[ebx], ax
  1213                                  ;	mov	[ebx+2], dx
  1214                                  ;	;
  1215                                  ;	retn
  1216                                  
  1217                                  read_disk_sector:
  1218                                  	; EAX = sector number (LBA)
  1219                                  	;
  1220 000009BB 0FB61D[9B150000]        	movzx	ebx, byte [ds_drv]
  1221 000009C2 88DA                    	mov	dl, bl	
  1222 000009C4 80FA02                  	cmp	dl, 2
  1223 000009C7 7203                    	jb	short rd0
  1224 000009C9 80C27E                  	add	dl, 7Eh  ; 80h, 81h, 82h, 83h
  1225                                  rd0:
  1226 000009CC 89DE                    	mov	esi, ebx
  1227 000009CE 8815[6D180000]          	mov	[drv], dl
  1228 000009D4 81C3[6E180000]          	add	ebx, drv_status
  1229 000009DA 8A33                    	mov	dh, [ebx]
  1230                                  rd1:
  1231 000009DC 80FEF0                  	cmp	dh, 0F0h
  1232 000009DF F5                      	cmc
  1233 000009E0 7262                            jc      short rd_lba_fails
  1234                                  	;
  1235 000009E2 89F3                    	mov	ebx, esi
  1236 000009E4 C0E302                  	shl	bl, 2
  1237 000009E7 81C3[50190000]          	add	ebx, ds_sec
  1238 000009ED 8B03                    	mov	eax, [ebx]
  1239 000009EF 81EB[50190000]          	sub	ebx, ds_sec
  1240 000009F5 81C3[98180000]                  add     ebx, drv_size 
  1241 000009FB 3B03                    	cmp	eax, [ebx] ; Last sector + 1 (number of secs.)
  1242 000009FD F5                      	cmc
  1243 000009FE 7244                            jc      short rd_lba_fails
  1244                                  	;
  1245 00000A00 F6C601                  	test	dh, 1 ; LBA ready ?
  1246 00000A03 7440                            jz      short rd_chs
  1247                                  rd_lba:
  1248                                  	; LBA read (private function)
  1249                                  	;((Retro UNIX 386 v1 - DISK I/O Test))
  1250 00000A05 81C6[6E180000]          	add	esi, drv_status
  1251 00000A0B 80268F                  	and	byte [esi], 8Fh ; clear error bits
  1252                                  	;
  1253 00000A0E 89C1                    	mov	ecx, eax ; Logical Block/Sector Address
  1254 00000A10 C1EB10                  	shr	ebx, 16
  1255 00000A13 BB[6C190000]                    mov     ebx, sector_buffer
  1256 00000A18 8A15[6D180000]          	mov	dl, [drv]
  1257 00000A1E C605[6C180000]04        	mov	byte [retry_count], 4
  1258                                  rd_lba_retry:
  1259 00000A25 B41B                    	mov	ah, 1Bh ; LBA read (private function)		
  1260 00000A27 B001                    	mov	al, 1
  1261 00000A29 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1262 00000A2B 7317                    	jnc	short rd_lba_ok
  1263                                  
  1264 00000A2D 80FC80                  	cmp	ah, 80h ; time out ?
  1265 00000A30 7411                    	je	short rd_lba_rfails
  1266 00000A32 FE0D[6C180000]          	dec	byte [retry_count]
  1267 00000A38 7409                    	jz	short rd_lba_rfails
  1268                                  	
  1269 00000A3A B40D                    	mov	ah, 0Dh ; Alternate reset
  1270 00000A3C CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1271 00000A3E 73E5                            jnc     short rd_lba_retry
  1272 00000A40 800EF0                  	or	byte [esi], 0F0h ; drive not ready !
  1273                                  rd_lba_rfails:
  1274 00000A43 F9                      	stc
  1275                                  rd_lba_fails:
  1276                                  rd_lba_ok:
  1277 00000A44 C3                      	retn
  1278                                  	;
  1279                                  	; CHS read (convert LBA address to CHS values)	;	
  1280                                  rd_chs:
  1281 00000A45 D1E6                    	shl	esi, 1
  1282 00000A47 89F3                    	mov	ebx, esi
  1283 00000A49 31D2                    	xor	edx, edx ; 0
  1284 00000A4B 29C9                    	sub	ecx, ecx 
  1285 00000A4D 81C3[8C180000]                  add     ebx, drv_spt
  1286 00000A53 668B0B                  	mov	cx, [ebx] ; sector per track
  1287                                                  ; EAX = sector address (LBA)
  1288 00000A56 F7F1                    	div	ecx
  1289 00000A58 88D1                    	mov	cl, dl	; sector number - 1
  1290 00000A5A FEC1                    	inc	cl	; sector number (1 based)
  1291 00000A5C 6651                    	push	cx
  1292 00000A5E 89F3                    	mov	ebx, esi
  1293 00000A60 81C3[80180000]                  add     ebx, drv_heads
  1294 00000A66 668B0B                  	mov	cx, [ebx] ; heads
  1295 00000A69 31D2                    	xor	edx, edx
  1296                                  		; EAX = cylinders * heads + head
  1297 00000A6B F7F1                    	div	ecx
  1298 00000A6D 6659                    	pop	cx     ; sector number
  1299 00000A6F 88D6                    	mov	dh, dl ; head number
  1300 00000A71 8A15[6D180000]          	mov	dl, [drv]
  1301 00000A77 88C5                    	mov	ch, al ; cylinder (bits 0-7)
  1302 00000A79 C0E406                  	shl	ah, 6
  1303 00000A7C 08E1                    	or	cl, ah ; cylinder (bits 8-9)
  1304                                  		       ; sector (bits 0-7)
  1305 00000A7E BB[6C190000]                    mov     ebx, sector_buffer
  1306                                  		; CL = sector (bits 0-6)
  1307                                  		;      cylinder (bits 7-8 -> bits 8-9)
  1308                                  		; CH = cylinder (bits 0-7)
  1309                                  		; DH = head
  1310                                  		; DL = drive
  1311                                  
  1312 00000A83 D1EE                    	shr	esi, 1 ; drive index (byte alignment)
  1313 00000A85 81C6[6E180000]          	add	esi, drv_status
  1314 00000A8B 80268F                  	and	byte [esi], 8Fh ; clear error bits
  1315                                  	;
  1316 00000A8E C605[6C180000]04        	mov	byte [retry_count], 4
  1317                                  rd_retry:	
  1318 00000A95 B402                    	mov	ah, 02h ; read sectors
  1319 00000A97 B001                    	mov	al, 1 ; sector count	
  1320 00000A99 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1321 00000A9B 7320                    	jnc	short rd_ok
  1322 00000A9D 80FC80                  	cmp	ah, 80h ; time out ?
  1323 00000AA0 7408                    	je	short rd_rfails
  1324 00000AA2 FE0D[6C180000]          	dec	byte [retry_count]
  1325 00000AA8 7502                    	jnz	short rd_reset
  1326                                  rd_rfails:
  1327 00000AAA F9                      	stc
  1328                                  rd_fails:
  1329 00000AAB C3                      	retn
  1330                                  rd_reset:
  1331 00000AAC 28E4                    	sub	ah, ah
  1332 00000AAE 80FA80                  	cmp	dl, 80h
  1333 00000AB1 7202                    	jb	short rd_fd_reset
  1334 00000AB3 B40D                    	mov	ah, 0Dh ; Alternate reset
  1335                                  rd_fd_reset:
  1336 00000AB5 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1337 00000AB7 73DC                            jnc     short rd_retry
  1338 00000AB9 800EF0                  	or	byte [esi], 0F0h ; drive not ready !
  1339 00000ABC F9                      	stc
  1340                                  rd_ok:
  1341 00000ABD C3                      	retn
  1342                                  
  1343                                  clear_screen:
  1344 00000ABE BF[741B0000]            	mov	edi, video_buffer
  1345 00000AC3 B9D0070000              	mov	ecx, 80*25
  1346 00000AC8 66B82007                        mov     ax, 0720h ; light gray char space (blank)
  1347 00000ACC F366AB                  	rep	stosw
  1348                                  
  1349 00000ACF E861FCFFFF              	call	video_page_update
  1350                                  
  1351 00000AD4 6631D2                          xor     dx, dx    ; column 0, row 0
  1352 00000AD7 E9B90C0000              	jmp	set_cposx ; set cursor position
  1353                                  
  1354                                  rfdp_err:
  1355 00000ADC E8DDFFFFFF              	call	clear_screen
  1356 00000AE1 BE[1B180000]            	mov	esi, drv_not_ready
  1357 00000AE6 E919030000              	jmp	print_msg	
  1358                                  
  1359                                  dskprm:
  1360                                  	; DISPLAY DISK PARAMETERS TABLE
  1361                                  	;
  1362                                  	; INPUT -> DL = Disk/Drive #
  1363                                  	; 
  1364 00000AEB 8815[6D180000]          	mov	byte [drv], dl  ; 0,1,80h,81h,82h,83h 
  1365                                  	;
  1366 00000AF1 F6C280                  	test	dl, 80h
  1367 00000AF4 7403                    	jz	short dskprm0
  1368 00000AF6 80EA7E                  	sub	dl, 7Eh ; hd0 = 2
  1369                                  dskprm0:
  1370 00000AF9 0FB6DA                  	movzx	ebx, dl
  1371 00000AFC 81C3[6E180000]          	add	ebx, drv_status
  1372                                  
  1373 00000B02 803B80                  	cmp	byte [ebx], 80h  ; existing ?
  1374 00000B05 72D5                    	jb	short rfdp_err
  1375                                  	;
  1376 00000B07 E8B2FFFFFF              	call	clear_screen	 ; clear video page 0	
  1377                                  	;
  1378 00000B0C 8A1D[6D180000]                  mov	bl, [drv]
  1379 00000B12 F6C380                  	test	bl, 80h
  1380 00000B15 0F85F7000000                    jnz     print_hdpt
  1381                                  
  1382 00000B1B 0FB6F3                  	movzx	esi, bl
  1383 00000B1E 80C330                  	add	bl, 30h	; '0'
  1384 00000B21 881D[B40E0000]          	mov	byte [flpdnum], bl
  1385 00000B27 81C6[32180000]          	add	esi, fd0_type
  1386 00000B2D 8A06                    	mov	al, [esi]
  1387 00000B2F A2[EB0E0000]                    mov     byte [flpdtype], al 
  1388                                                                     ; floppy disk drive type
  1389                                  				   ; (1=360K, 2=1.2M, 3=720K, 4=1.44M)
  1390                                  print_flpdpt:
  1391                                  	; Writing the Diskette Parameter Table on screen
  1392 00000B34 C0E304                  	shl	bl, 4 ; * 16
  1393 00000B37 0FB6F3                  	movzx	esi, bl
  1394 00000B3A 81C6[B0180000]          	add	esi, fd0_dpt
  1395 00000B40 AC                      	lodsb 	; bits 0-3: SRT step rate time
  1396                                  		; bits 4-7: head unload time
  1397 00000B41 BF[350F0000]            	mov	edi, rSrtHdUnld
  1398 00000B46 E8AC000000              	call	write_hex
  1399 00000B4B AC                      	lodsb 	; bit 0: 1=use DMA
  1400                                  		; bits 2-7: head load time
  1401 00000B4C BF[7D0F0000]            	mov	edi, rDmaHdLd
  1402 00000B51 E8A1000000              	call	write_hex
  1403 00000B56 AC                      	lodsb 	; 55-ms increments 
  1404                                  		; before turning disk motor off
  1405 00000B57 BF[C40F0000]            	mov	edi, bMotorOff
  1406 00000B5C E896000000              	call	write_hex
  1407 00000B61 AC                      	lodsb 	; sector size
  1408                                  		; (0=128, 1=256, 2=512, 3=1024)
  1409 00000B62 BF[09100000]            	mov	edi, bSectSize
  1410 00000B67 E88B000000              	call	write_hex
  1411 00000B6C AC                      	lodsb 	; EOT (last sector on a track)
  1412 00000B6D BF[35100000]            	mov	edi, bLastTrack
  1413 00000B72 E880000000              	call	write_hex
  1414 00000B77 AC                      	lodsb 	; gap length 
  1415                                  		; for read/write operations
  1416 00000B78 BF[51100000]            	mov	edi, bGapLen
  1417 00000B7D E875000000              	call	write_hex
  1418 00000B82 AC                      	lodsb 	; DTL (Data Transfer Length)
  1419                                  		; max transfer when length not set	
  1420 00000B83 BF[6D100000]            	mov	edi, bDTL
  1421 00000B88 E86A000000              	call	write_hex
  1422 00000B8D AC                      	lodsb 	; gap length for format operation
  1423 00000B8E BF[89100000]            	mov	edi, bGapFmt
  1424 00000B93 E85F000000              	call	write_hex
  1425 00000B98 AC                      	lodsb 	; fill character for format 
  1426                                  		; (normally F6H)
  1427 00000B99 BF[A5100000]            	mov	edi, bFillChar
  1428 00000B9E E854000000              	call	write_hex
  1429 00000BA3 AC                      	lodsb 	; head-settle time
  1430                                  		; (in milliseconds)
  1431 00000BA4 BF[D0100000]            	mov	edi, bHdSettle
  1432 00000BA9 E849000000              	call	write_hex
  1433 00000BAE AC                      	lodsb 	; motor-startup time
  1434                                  		; (in 1/8th-second intervals)
  1435 00000BAF BF[F9100000]            	mov	edi, bMotorOn
  1436 00000BB4 E83E000000              	call	write_hex
  1437                                  	;
  1438                                  	; (extension, not in original bios function)
  1439 00000BB9 AC                      	lodsb	; Max. track number
  1440 00000BBA BF[33110000]            	mov	edi, bMaxTrack
  1441 00000BBF E833000000              	call	write_hex
  1442 00000BC4 AC                      	lodsb	; Data transfer rate
  1443 00000BC5 BF[4F110000]            	mov	edi, bDataRate
  1444 00000BCA E828000000              	call	write_hex
  1445                                  	;
  1446 00000BCF A0[6D180000]            	mov	al, [drv]
  1447 00000BD4 0430                    	add	al, 30h ; '0'
  1448 00000BD6 A2[B40E0000]                    mov     byte [flpdnum], al
  1449 00000BDB BE[AC0E0000]                    mov     esi, FLPDPT
  1450 00000BE0 E81F020000              	call	print_msg
  1451 00000BE5 C3                      	retn
  1452                                  
  1453                                  write_dhex:
  1454 00000BE6 88E3                    	mov	bl, ah
  1455 00000BE8 C0EB04                          shr     bl, 4
  1456 00000BEB E813000000                      call    dhgd
  1457 00000BF0 88E3                    	mov	bl, ah
  1458 00000BF2 E80C000000              	call	dhgd
  1459                                  
  1460                                  write_hex:
  1461 00000BF7 88C3                    	mov	bl, al
  1462 00000BF9 C0EB04                          shr     bl, 4
  1463 00000BFC E802000000              	call	dhgd
  1464 00000C01 88C3                    	mov	bl, al
  1465                                  	;call	dhgd
  1466                                  	;retn
  1467                                  dhgd:
  1468 00000C03 50                      	push	eax
  1469 00000C04 83E30F                  	and	ebx, 0Fh
  1470 00000C07 81C3[8B150000]                  add     ebx, hex_digits
  1471 00000C0D 8A03                            mov     al, [ebx]
  1472 00000C0F AA                      	stosb
  1473 00000C10 58                      	pop	eax
  1474 00000C11 C3                      	retn
  1475                                  
  1476                                  print_hdpt:
  1477                                  	;mov	bl, [drv]
  1478 00000C12 80E303                  	and	bl, 3
  1479 00000C15 88D8                    	mov	al, bl
  1480 00000C17 0402                    	add	al, 2
  1481 00000C19 A2[6D180000]            	mov	[drv], al
  1482                                  	;
  1483 00000C1E C0E305                  	shl	bl, 5 ; * 32
  1484 00000C21 0FB6F3                  	movzx	esi, bl
  1485 00000C24 81C6[D0180000]          	add	esi, hd0_dpt  
  1486                                  	;
  1487 00000C2A 807E03A0                	cmp	byte [esi+3], 0A0h ; Translated table
  1488 00000C2E 0F84EB000000                    je      print_thdpt       ; indicator
  1489                                  	;
  1490                                  	; Writing Fixed Disk Parameter Table on screen
  1491 00000C34 66AD                    	lodsw 	; Number of Cylinders
  1492 00000C36 BF[C2110000]            	mov	edi, cylnum
  1493 00000C3B E8A6FFFFFF              	call	write_dhex
  1494 00000C40 AC                      	lodsb	; Number of Heads
  1495 00000C41 BF[DF110000]            	mov	edi, headnum
  1496 00000C46 E8ACFFFFFF              	call	write_hex
  1497 00000C4B AC                      	lodsb	; Reserved
  1498 00000C4C BF[FA110000]            	mov	edi, rsvd3
  1499 00000C51 E8A1FFFFFF              	call	write_hex
  1500 00000C56 AC                      	lodsb	; Reserved
  1501 00000C57 BF[15120000]            	mov	edi, rsvd4
  1502 00000C5C E896FFFFFF              	call	write_hex
  1503 00000C61 66AD                    	lodsw	; Precompensation (Obsolete)
  1504 00000C63 BF[30120000]            	mov	edi, pcompnum
  1505 00000C68 E879FFFFFF              	call	write_dhex
  1506 00000C6D AC                      	lodsb	; Reserved
  1507 00000C6E BF[4D120000]            	mov	edi, rsvd7
  1508 00000C73 E87FFFFFFF              	call	write_hex
  1509 00000C78 AC                      	lodsb	; Drive Control Byte
  1510 00000C79 BF[68120000]            	mov	edi, dcbnum
  1511 00000C7E E874FFFFFF              	call	write_hex
  1512 00000C83 66AD                    	lodsw	; Reserved
  1513 00000C85 BF[83120000]            	mov	edi, rsvd9
  1514 00000C8A E857FFFFFF              	call	write_dhex
  1515 00000C8F AC                      	lodsb	; Reserved
  1516 00000C90 BF[A0120000]            	mov	edi, rsvd11
  1517 00000C95 E85DFFFFFF              	call	write_hex
  1518 00000C9A 66AD                    	lodsw	; Landing Zone (Obsolete)
  1519 00000C9C BF[BB120000]            	mov	edi, lzonenum
  1520 00000CA1 E840FFFFFF              	call	write_dhex
  1521 00000CA6 AC                      	lodsb	; Sectors per Track
  1522 00000CA7 BF[D8120000]            	mov	edi, psptnum
  1523 00000CAC E846FFFFFF              	call	write_hex
  1524 00000CB1 AC                      	lodsb	; Reserved
  1525 00000CB2 BF[F3120000]            	mov	edi, rsvd15
  1526 00000CB7 E83BFFFFFF              	call	write_hex
  1527                                  	;
  1528                                  	; (extension, not in original bios function)
  1529 00000CBC 66AD                    	lodsw	; I/O Port Base Address
  1530 00000CBE BF[10130000]            	mov	edi, bPortAddr
  1531 00000CC3 E81EFFFFFF              	call	write_dhex
  1532                                  	; 06/01/2015
  1533 00000CC8 66AD                    	lodsw	; Control Port Address
  1534 00000CCA BF[2D130000]            	mov	edi, cPortAddr
  1535 00000CCF E812FFFFFF              	call	write_dhex
  1536 00000CD4 AC                      	lodsb	; Head Register Upper Nibble 
  1537 00000CD5 BF[4A130000]            	mov	edi, hregupnib
  1538 00000CDA E818FFFFFF              	call	write_hex
  1539                                  	;
  1540 00000CDF A0[6D180000]            	mov     al, [drv]
  1541 00000CE4 88C3                    	mov	bl, al
  1542 00000CE6 0430                    	add	al, '0'
  1543 00000CE8 A2[8A110000]                    mov     [dsknum], al
  1544                                  	;	      
  1545 00000CED C0E302                  	shl	bl, 2
  1546 00000CF0 0FB6F3                  	movzx	esi, bl
  1547 00000CF3 81C6[98180000]                  add     esi, drv_size
  1548 00000CF9 668B4602                	mov	ax, [esi+2]
  1549 00000CFD BF[67130000]                    mov     edi, disksize
  1550 00000D02 E8DFFEFFFF              	call	write_dhex
  1551 00000D07 668B06                  	mov	ax, [esi]
  1552 00000D0A BF[6B130000]            	mov	edi, disksize+4
  1553 00000D0F E8D2FEFFFF              	call	write_dhex	
  1554                                  	;
  1555 00000D14 BE[82110000]                    mov     esi, HDPT
  1556 00000D19 E8E6000000              	call	print_msg
  1557 00000D1E C3                      	retn
  1558                                  
  1559                                  print_thdpt:
  1560                                  	; Writing the Translated FDPT on screen
  1561                                  	; (PHOENIX - EDD specification v1.1)
  1562 00000D1F 66AD                    	lodsw 	; Logical Numbers of Cylinders, Limit 1024
  1563 00000D21 BF[C0130000]            	mov	edi, lcylnum
  1564 00000D26 E8BBFEFFFF              	call	write_dhex
  1565 00000D2B AC                      	lodsb	; Logical Numbers of Heads, Limit 256
  1566 00000D2C BF[DD130000]            	mov	edi, lheadnum
  1567 00000D31 E8C1FEFFFF              	call	write_hex
  1568 00000D36 AC                      	lodsb	; A0h signature, indicates translated table
  1569 00000D37 BF[F8130000]            	mov	edi, tsignum
  1570 00000D3C E8B6FEFFFF              	call	write_hex
  1571 00000D41 AC                      	lodsb	; Physical Sectors per Track
  1572 00000D42 BF[13140000]            	mov	edi, tpsptnum
  1573 00000D47 E8ABFEFFFF              	call	write_hex
  1574 00000D4C 66AD                    	lodsw	; Precompensation (Obsolete)
  1575 00000D4E BF[2E140000]            	mov	edi, tpcompnum
  1576 00000D53 E88EFEFFFF              	call	write_dhex
  1577 00000D58 AC                      	lodsb	; Reserved
  1578 00000D59 BF[57140000]            	mov	edi, trsvd7
  1579 00000D5E E894FEFFFF              	call	write_hex
  1580 00000D63 AC                      	lodsb	; Drive Control Byte
  1581 00000D64 BF[72140000]            	mov	edi, tdcbnum
  1582 00000D69 E889FEFFFF              	call	write_hex
  1583 00000D6E 66AD                    	lodsw	; Physical Cylinders, limit 65536
  1584 00000D70 BF[8D140000]            	mov	edi, tpcylnum
  1585 00000D75 E86CFEFFFF              	call	write_dhex
  1586 00000D7A AC                      	lodsb	; Physical Heads, limit 16
  1587 00000D7B BF[AA140000]            	mov	edi, tpheadnum
  1588 00000D80 E872FEFFFF              	call	write_hex
  1589 00000D85 66AD                    	lodsw	; Landing Zone (Obsolete)
  1590 00000D87 BF[C5140000]            	mov	edi, tlzonenum
  1591 00000D8C E855FEFFFF              	call	write_dhex
  1592 00000D91 AC                      	lodsb	; Logical Sectors per Track, Limit 63
  1593 00000D92 BF[EE140000]            	mov	edi, lsptnum
  1594 00000D97 E85BFEFFFF              	call	write_hex
  1595 00000D9C AC                      	lodsb	; Checksum for translated FDPT 
  1596 00000D9D BF[09150000]            	mov	edi, checksum
  1597 00000DA2 E850FEFFFF              	call	write_hex
  1598                                  	;
  1599                                  	; (extension, not in original bios function)
  1600 00000DA7 66AD                    	lodsw	; I/O Port Base Address
  1601 00000DA9 BF[26150000]            	mov	edi, tbPortAddr
  1602 00000DAE E833FEFFFF              	call	write_dhex
  1603                                  	; 06/01/2015
  1604 00000DB3 66AD                    	lodsw	; Control Port Address
  1605 00000DB5 BF[43150000]            	mov	edi, tcPortAddr
  1606 00000DBA E827FEFFFF              	call	write_dhex
  1607 00000DBF AC                      	lodsb	; Head Register Upper Nibble 
  1608 00000DC0 BF[60150000]            	mov	edi, thregupnib
  1609 00000DC5 E82DFEFFFF              	call	write_hex
  1610                                  	;
  1611 00000DCA A0[6D180000]            	mov     al, [drv]
  1612 00000DCF 88C3                    	mov	bl, al
  1613 00000DD1 0430                    	add	al, '0'
  1614 00000DD3 A2[7D130000]                    mov     [tdsknum], al
  1615                                  	;  
  1616 00000DD8 C0E302                  	shl	bl, 2
  1617 00000DDB 0FB6F3                  	movzx	esi, bl
  1618 00000DDE 81C6[98180000]                  add     esi, drv_size
  1619 00000DE4 668B4602                	mov	ax, [esi+2]
  1620 00000DE8 BF[7D150000]            	mov	edi, tdisksize
  1621 00000DED E8F4FDFFFF              	call	write_dhex
  1622 00000DF2 668B06                  	mov	ax, [esi]
  1623 00000DF5 BF[81150000]            	mov	edi, tdisksize+4
  1624 00000DFA E8E7FDFFFF              	call	write_dhex	
  1625                                  	;
  1626 00000DFF BE[75130000]            	mov     esi, THDPT
  1627                                  	;call	print_msg
  1628                                  	;retn
  1629                                  
  1630                                  print_msg:
  1631 00000E04 66BB0700                	mov	bx, 7
  1632 00000E08 B40E                            mov     ah, 0Eh
  1633                                  pmsg_loop:
  1634 00000E0A AC                      	lodsb
  1635 00000E0B 20C0                    	and	al, al
  1636 00000E0D 7404                    	jz	short pmsg_ok
  1637 00000E0F CD31                    	int	31h	; TRDOS 386 video interrupt
  1638 00000E11 EBF7                    	jmp	short pmsg_loop	
  1639                                  pmsg_ok:
  1640 00000E13 B410                    	mov	ah, 10h ; Getchar
  1641 00000E15 CD32                    	int	32h	; TRDOS 386 keyboard interrupt
  1642 00000E17 C3                      	retn
  1643                                  
  1644                                  	; 28/08/2020
  1645                                  dskvprm:
  1646                                  	; DISPLAY (LBA) DISK SIZE AND VIRTUAL CHS PARAMETERS
  1647                                  	;
  1648                                  	; INPUT -> DL = Disk/Drive #
  1649                                  	; 
  1650 00000E18 8815[6D180000]          	mov	byte [drv], dl  ; 0,1,80h,81h,82h,83h 
  1651                                  	;
  1652 00000E1E F6C280                  	test	dl, 80h
  1653 00000E21 7403                    	jz	short dskvprm0
  1654 00000E23 80EA7E                  	sub	dl, 7Eh ; hd0 = 2
  1655                                  dskvprm0:
  1656 00000E26 0FB6F2                  	movzx	esi, dl
  1657                                  
  1658 00000E29 80BE[6E180000]80        	cmp	byte [esi+drv_status], 80h  ; existing ?
  1659 00000E30 0F82A6FCFFFF            	jb	rfdp_err
  1660                                  	;
  1661 00000E36 E883FCFFFF              	call	clear_screen	 ; clear video page 0	
  1662                                  	;
  1663                                  
  1664 00000E3B 66C1E602                	shl	si, 2 ; * 4
  1665 00000E3F 668B86[9A180000]        	mov	ax, [esi+drv_size+2]
  1666 00000E46 BF[41170000]            	mov	edi, lbadisksize
  1667 00000E4B E896FDFFFF              	call	write_dhex
  1668 00000E50 668B86[98180000]        	mov	ax, [esi+drv_size]
  1669 00000E57 BF[45170000]            	mov	edi, lbadisksize+4
  1670 00000E5C E885FDFFFF              	call	write_dhex
  1671 00000E61 66D1EE                  	shr	si, 1
  1672 00000E64 668B86[74180000]        	mov	ax, [esi+drv_cylinders]
  1673 00000E6B BF[62170000]            	mov	edi, vcylinders
  1674 00000E70 E871FDFFFF              	call	write_dhex	
  1675 00000E75 8A86[80180000]          	mov	al, [esi+drv_heads]
  1676 00000E7B BF[75170000]            	mov	edi, vheads
  1677 00000E80 E872FDFFFF              	call	write_hex
  1678 00000E85 8A86[8C180000]          	mov	al, [esi+drv_spt]
  1679 00000E8B BF[86170000]            	mov	edi, vspt
  1680 00000E90 E862FDFFFF              	call	write_hex
  1681                                  
  1682 00000E95 6689F0                  	mov	ax, si
  1683 00000E98 D0E8                    	shr	al, 1
  1684 00000E9A 0430                    	add	al, '0'
  1685 00000E9C A2[0B170000]            	mov	[vprm_drv], al
  1686                                  
  1687 00000EA1 BE[03170000]                    mov     esi, VPRMS
  1688 00000EA6 E859FFFFFF              	call	print_msg
  1689 00000EAB C3                      	retn
  1690                                  
  1691                                  ;
  1692                                  FLPDPT:
  1693 00000EAC 07                      	db 07h
  1694 00000EAD 0D0A                    	db 0Dh, 0Ah	
  1695 00000EAF 4469736B20              	db 'Disk '
  1696                                  flpdnum:
  1697 00000EB4 58202D20                	db 'X - '
  1698 00000EB8 4449534B4554544520-     	db 'DISKETTE PARAMETER TABLE'
  1698 00000EC1 504152414D45544552-
  1698 00000ECA 205441424C45       
  1699 00000ED0 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  1700 00000ED4 547970652020202020-     	db 'Type                 : '
  1700 00000EDD 202020202020202020-
  1700 00000EE6 2020203A20         
  1701                                  flpdtype:
  1702 00000EEB 58202020                	db 'X   '
  1703 00000EEF 5B2031203D20333630-     	db '[ 1 = 360K, 2 = 1.2M, 3 = 720K, 4 = 1.44M ]'
  1703 00000EF8 4B2C2032203D20312E-
  1703 00000F01 324D2C2033203D2037-
  1703 00000F0A 32304B2C2034203D20-
  1703 00000F13 312E34344D205D     
  1704 00000F1A 0D0A0D0A                	db 0Dh, 0Ah, 0DH, 0Ah 
  1705 00000F1E 535254202D20486561-     	db 'SRT - Head Unld Time : '
  1705 00000F27 6420556E6C64205469-
  1705 00000F30 6D65203A20         
  1706                                  rSrtHdUnld:
  1707 00000F35 585868202862697473-     	db 'XXh (bits 0-3: SRT, bits 4-7: head unload time)'
  1707 00000F3E 20302D333A20535254-
  1707 00000F47 2C206269747320342D-
  1707 00000F50 373A20686561642075-
  1707 00000F59 6E6C6F61642074696D-
  1707 00000F62 6529               
  1708 00000F64 0D0A                    	db 0Dh, 0Ah
  1709 00000F66 444D41202D20486561-     	db 'DMA - Head Load Time : '
  1709 00000F6F 64204C6F6164205469-
  1709 00000F78 6D65203A20         
  1710                                  rDmaHdLd:
  1711 00000F7D 585868202862697420-     	db 'XXh (bit 0: 1 = DMA, bits 2-7: head load time)'
  1711 00000F86 303A2031203D20444D-
  1711 00000F8F 412C20626974732032-
  1711 00000F98 2D373A206865616420-
  1711 00000FA1 6C6F61642074696D65-
  1711 00000FAA 29                 
  1712 00000FAB 0D0A                    	db 0Dh, 0Ah
  1713 00000FAD 4D6F746F72204F6666-     	db 'Motor Off Count      : '
  1713 00000FB6 20436F756E74202020-
  1713 00000FBF 2020203A20         
  1714                                  bMotorOff:
  1715 00000FC4 585868202877697468-     	db 'XXh (with 55ms icrements before turning off)'
  1715 00000FCD 2035356D7320696372-
  1715 00000FD6 656D656E7473206265-
  1715 00000FDF 666F7265207475726E-
  1715 00000FE8 696E67206F666629   
  1716 00000FF0 0D0A                    	db 0Dh, 0Ah
  1717 00000FF2 536563746F72205369-     	db 'Sector Size          : '
  1717 00000FFB 7A6520202020202020-
  1717 00001004 2020203A20         
  1718                                  bSectSize:
  1719 00001009 585868202832203D20-     	db 'XXh (2 = 512 bytes)'
  1719 00001012 353132206279746573-
  1719 0000101B 29                 
  1720 0000101C 0D0A                    	db 0Dh, 0Ah	
  1721 0000101E 4C6173742053656374-     	db 'Last Sect on a Track : '
  1721 00001027 206F6E206120547261-
  1721 00001030 636B203A20         
  1722                                  bLastTrack:
  1723 00001035 585868                  	db 'XXh'
  1724 00001038 0D0A                    	db 0Dh, 0Ah
  1725 0000103A 476170204C656E6774-     	db 'Gap Length  (R/W)    : '
  1725 00001043 68202028522F572920-
  1725 0000104C 2020203A20         
  1726                                  bGapLen:
  1727 00001051 585868                  	db 'XXh'
  1728 00001054 0D0A                    	db 0Dh, 0Ah
  1729 00001056 44617461205472616E-     	db 'Data Transfer Length : '
  1729 0000105F 73666572204C656E67-
  1729 00001068 7468203A20         
  1730                                  bDTL:
  1731 0000106D 585868                  	db 'XXh'
  1732 00001070 0D0A                    	db 0Dh, 0Ah		
  1733 00001072 476170204C656E6774-     	db 'Gap Length (Format)  : '
  1733 0000107B 682028466F726D6174-
  1733 00001084 2920203A20         
  1734                                  bGapFmt:
  1735 00001089 585868                  	db 'XXh'
  1736 0000108C 0D0A                    	db 0Dh, 0Ah
  1737 0000108E 46696C6C2043686172-     	db 'Fill Char for format : '
  1737 00001097 20666F7220666F726D-
  1737 000010A0 6174203A20         
  1738                                  bFillChar:
  1739 000010A5 58586820286E6F726D-     	db 'XXh (normally F6h)'
  1739 000010AE 616C6C792046366829 
  1740 000010B7 0D0A                    	db 0Dh, 0Ah
  1741 000010B9 486561642053657474-     	db 'Head Settle Time     : '
  1741 000010C2 6C652054696D652020-
  1741 000010CB 2020203A20         
  1742                                  bHdSettle:
  1743 000010D0 585868206D696C6C69-     	db 'XXh milliseconds'
  1743 000010D9 7365636F6E6473     
  1744 000010E0 0D0A                    	db 0Dh, 0Ah
  1745 000010E2 4D6F746F7220537461-     	db 'Motor Startup Time   : '
  1745 000010EB 727475702054696D65-
  1745 000010F4 2020203A20         
  1746                                  bMotorOn:
  1747 000010F9 5858682028696E2031-     	db 'XXh (in 1/8th second intervals)'
  1747 00001102 2F387468207365636F-
  1747 0000110B 6E6420696E74657276-
  1747 00001114 616C7329           
  1748 00001118 0D0A                    	db 0Dh, 0Ah
  1749                                  	; 19/12/2014
  1750 0000111A 0D0A                    	db 0Dh, 0Ah
  1751 0000111C 4D6178696D756D2054-     	db 'Maximum Track Number : '
  1751 00001125 7261636B204E756D62-
  1751 0000112E 6572203A20         
  1752                                  bMaxTrack:
  1753 00001133 585868                  	db 'XXh'
  1754 00001136 0D0A                    	db 0Dh, 0Ah
  1755 00001138 44617461205472616E-     	db 'Data Transfer Rate   : '
  1755 00001141 736665722052617465-
  1755 0000114A 2020203A20         
  1756                                  bDataRate:
  1757 0000114F 585868202830306820-     	db 'XXh (00h = 500KBS, 40h = 300KBS, 80H = 250KBS)'
  1757 00001158 3D203530304B42532C-
  1757 00001161 20343068203D203330-
  1757 0000116A 304B42532C20383048-
  1757 00001173 203D203235304B4253-
  1757 0000117C 29                 
  1758 0000117D 0D0A                    	db 0Dh, 0Ah
  1759 0000117F 0D0A00                  	db 0Dh, 0Ah, 0
  1760                                  
  1761                                  HDPT:
  1762 00001182 07                      	db 07h
  1763 00001183 0D0A                    	db 0Dh, 0Ah
  1764 00001185 4469736B20              	db 'Disk '
  1765                                  dsknum:
  1766 0000118A 58202D20                	db 'X - '	
  1767 0000118E 464958454420444953-     	db 'FIXED DISK PARAMETER TABLE'
  1767 00001197 4B20504152414D4554-
  1767 000011A0 4552205441424C45   
  1768 000011A8 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah 
  1769 000011AC 4E756D626572206F66-     	db 'Number of Cylinders : '
  1769 000011B5 2043796C696E646572-
  1769 000011BE 73203A20           
  1770                                  cylnum:
  1771 000011C2 5858585868              	db 'XXXXh'
  1772 000011C7 0D0A                    	db 0Dh, 0Ah
  1773 000011C9 4E756D626572206F66-     	db 'Number of Heads     : '
  1773 000011D2 204865616473202020-
  1773 000011DB 20203A20           
  1774                                  headnum:
  1775 000011DF 585868                  	db 'XXh'
  1776 000011E2 0D0A                    	db 0Dh, 0Ah
  1777 000011E4 526573657276656420-     	db 'Reserved            : '
  1777 000011ED 202020202020202020-
  1777 000011F6 20203A20           
  1778                                  rsvd3:
  1779 000011FA 585868                  	db 'XXh'
  1780 000011FD 0D0A                    	db 0Dh, 0Ah
  1781 000011FF 526573657276656420-     	db 'Reserved            : '
  1781 00001208 202020202020202020-
  1781 00001211 20203A20           
  1782                                  rsvd4:
  1783 00001215 585868                  	db 'XXh'
  1784 00001218 0D0A                    	db 0Dh, 0Ah	
  1785 0000121A 507265636F6D70656E-     	db 'Precompensation     : '
  1785 00001223 736174696F6E202020-
  1785 0000122C 20203A20           
  1786                                  pcompnum:
  1787 00001230 5858585868              	db 'XXXXh'
  1788 00001235 0D0A                    	db 0Dh, 0Ah
  1789 00001237 526573657276656420-     	db 'Reserved            : '
  1789 00001240 202020202020202020-
  1789 00001249 20203A20           
  1790                                  rsvd7:
  1791 0000124D 585868                  	db 'XXh'
  1792 00001250 0D0A                    	db 0Dh, 0Ah
  1793 00001252 447269766520436F6E-     	db 'Drive Control Byte  : '
  1793 0000125B 74726F6C2042797465-
  1793 00001264 20203A20           
  1794                                  dcbnum:
  1795 00001268 585868                  	db 'XXh'
  1796 0000126B 0D0A                    	db 0Dh, 0Ah		
  1797 0000126D 526573657276656420-     	db 'Reserved            : '
  1797 00001276 202020202020202020-
  1797 0000127F 20203A20           
  1798                                  rsvd9:
  1799 00001283 5858585868              	db 'XXXXh'
  1800 00001288 0D0A                    	db 0Dh, 0Ah
  1801 0000128A 526573657276656420-     	db 'Reserved            : '
  1801 00001293 202020202020202020-
  1801 0000129C 20203A20           
  1802                                  rsvd11:
  1803 000012A0 585868                  	db 'XXh'
  1804 000012A3 0D0A                    	db 0Dh, 0Ah
  1805 000012A5 4C616E64696E67205A-     	db 'Landing Zone        : '
  1805 000012AE 6F6E65202020202020-
  1805 000012B7 20203A20           
  1806                                  lzonenum:
  1807 000012BB 5858585868              	db 'XXXXh'
  1808 000012C0 0D0A                    	db 0Dh, 0Ah
  1809 000012C2 536563746F72732070-     	db 'Sectors per Track   : '
  1809 000012CB 657220547261636B20-
  1809 000012D4 20203A20           
  1810                                  psptnum:
  1811 000012D8 585868                  	db 'XXh'
  1812 000012DB 0D0A                    	db 0Dh, 0Ah
  1813 000012DD 526573657276656420-     	db 'Reserved            : '
  1813 000012E6 202020202020202020-
  1813 000012EF 20203A20           
  1814                                  rsvd15:
  1815 000012F3 585868                  	db 'XXh'
  1816 000012F6 0D0A                    	db 0Dh, 0Ah
  1817 000012F8 0D0A                    	db 0Dh, 0Ah
  1818 000012FA 492F4F20506F727420-     	db 'I/O Port Base Addr  : '
  1818 00001303 426173652041646472-
  1818 0000130C 20203A20           
  1819                                  bPortAddr:
  1820 00001310 5858585868              	db 'XXXXh'
  1821 00001315 0D0A                    	db 0Dh, 0Ah
  1822 00001317 436F6E74726F6C2050-     	db 'Control Port Addr   : '
  1822 00001320 6F7274204164647220-
  1822 00001329 20203A20           
  1823                                  cPortAddr:
  1824 0000132D 5858585868              	db 'XXXXh'
  1825 00001332 0D0A                    	db 0Dh, 0Ah
  1826 00001334 486561642052656720-     	db 'Head Reg Upp Nibb   : '
  1826 0000133D 557070204E69626220-
  1826 00001346 20203A20           
  1827                                  hregupnib:
  1828 0000134A 585868                  	db 'XXh'
  1829 0000134D 0D0A                    	db 0Dh, 0Ah
  1830 0000134F 0D0A                    	db 0Dh, 0Ah
  1831 00001351 53697A652028696E20-     	db 'Size (in sectors)   : '
  1831 0000135A 736563746F72732920-
  1831 00001363 20203A20           
  1832                                  disksize:
  1833 00001367 585858585858585868      	db 'XXXXXXXXh'
  1834 00001370 0D0A                    	db 0Dh, 0Ah
  1835 00001372 0D0A00                  	db 0Dh, 0Ah, 0
  1836                                  
  1837                                  THDPT:
  1838 00001375 07                      	db 07h
  1839 00001376 0D0A                    	db 0Dh, 0Ah
  1840 00001378 4469736B20              	db 'Disk '
  1841                                  tdsknum:
  1842 0000137D 58202D20                	db 'X - '	
  1843 00001381 5452414E534C415445-     	db 'TRANSLATED FIXED DISK PARAMETER TABLE'
  1843 0000138A 442046495845442044-
  1843 00001393 49534B20504152414D-
  1843 0000139C 45544552205441424C-
  1843 000013A5 45                 
  1844 000013A6 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah 
  1845 000013AA 4C6F676963616C2043-     	db 'Logical Cylinders   : '
  1845 000013B3 796C696E6465727320-
  1845 000013BC 20203A20           
  1846                                  lcylnum:
  1847 000013C0 5858585868              	db 'XXXXh'
  1848 000013C5 0D0A                    	db 0Dh, 0Ah
  1849 000013C7 4C6F676963616C2048-     	db 'Logical Heads       : '
  1849 000013D0 656164732020202020-
  1849 000013D9 20203A20           
  1850                                  lheadnum:
  1851 000013DD 585868                  	db 'XXh'
  1852 000013E0 0D0A                    	db 0Dh, 0Ah
  1853 000013E2 5369676E6174757265-     	db 'Signature           : '
  1853 000013EB 202020202020202020-
  1853 000013F4 20203A20           
  1854                                  tsignum:
  1855 000013F8 585868                  	db 'XXh'
  1856 000013FB 0D0A                    	db 0Dh, 0Ah
  1857 000013FD 506879205365632070-     	db 'Phy Sec per Track   : '
  1857 00001406 657220547261636B20-
  1857 0000140F 20203A20           
  1858                                  tpsptnum:
  1859 00001413 585868                  	db 'XXh'
  1860 00001416 0D0A                    	db 0Dh, 0Ah	
  1861 00001418 507265636F6D70656E-     	db 'Precompensation     : '
  1861 00001421 736174696F6E202020-
  1861 0000142A 20203A20           
  1862                                  tpcompnum:
  1863 0000142E 58585858682020284F-     	db 'XXXXh  (Obsolete)'
  1863 00001437 62736F6C65746529   
  1864 0000143F 0D0A                    	db 0Dh, 0Ah
  1865 00001441 526573657276656420-     	db 'Reserved            : '
  1865 0000144A 202020202020202020-
  1865 00001453 20203A20           
  1866                                  trsvd7:
  1867 00001457 585868                  	db 'XXh'
  1868 0000145A 0D0A                    	db 0Dh, 0Ah
  1869 0000145C 447269766520436F6E-     	db 'Drive Control Byte  : '
  1869 00001465 74726F6C2042797465-
  1869 0000146E 20203A20           
  1870                                  tdcbnum:
  1871 00001472 585868                  	db 'XXh'
  1872 00001475 0D0A                    	db 0Dh, 0Ah		
  1873 00001477 506879736963616C20-     	db 'Physical Cylinders  : '
  1873 00001480 43796C696E64657273-
  1873 00001489 20203A20           
  1874                                  tpcylnum:
  1875 0000148D 5858585868              	db 'XXXXh'
  1876 00001492 0D0A                    	db 0Dh, 0Ah
  1877 00001494 506879736963616C20-     	db 'Physical Heads      : '
  1877 0000149D 486561647320202020-
  1877 000014A6 20203A20           
  1878                                  tpheadnum:
  1879 000014AA 585868                  	db 'XXh'
  1880 000014AD 0D0A                    	db 0Dh, 0Ah
  1881 000014AF 4C616E64696E67205A-     	db 'Landing Zone        : '
  1881 000014B8 6F6E65202020202020-
  1881 000014C1 20203A20           
  1882                                  tlzonenum:
  1883 000014C5 58585858682020284F-     	db 'XXXXh  (Obsolete)'
  1883 000014CE 62736F6C65746529   
  1884 000014D6 0D0A                    	db 0Dh, 0Ah
  1885 000014D8 4C6F67696320536563-     	db 'Logic Sec per Trk   : '
  1885 000014E1 207065722054726B20-
  1885 000014EA 20203A20           
  1886                                  lsptnum:
  1887 000014EE 585868                  	db 'XXh'
  1888 000014F1 0D0A                    	db 0Dh, 0Ah
  1889 000014F3 436865636B73756D20-     	db 'Checksum            : '
  1889 000014FC 202020202020202020-
  1889 00001505 20203A20           
  1890                                  checksum:
  1891 00001509 585868                  	db 'XXh'
  1892 0000150C 0D0A                    	db 0Dh, 0Ah
  1893 0000150E 0D0A                    	db 0Dh, 0Ah
  1894 00001510 492F4F20506F727420-     	db 'I/O Port Base Addr  : '
  1894 00001519 426173652041646472-
  1894 00001522 20203A20           
  1895                                  tbPortAddr:
  1896 00001526 5858585868              	db 'XXXXh'
  1897 0000152B 0D0A                    	db 0Dh, 0Ah
  1898 0000152D 436F6E74726F6C2050-     	db 'Control Port Addr   : '
  1898 00001536 6F7274204164647220-
  1898 0000153F 20203A20           
  1899                                  tcPortAddr:
  1900 00001543 5858585868              	db 'XXXXh'
  1901 00001548 0D0A                    	db 0Dh, 0Ah
  1902 0000154A 486561642052656720-     	db 'Head Reg Upp Nibb   : '
  1902 00001553 557070204E69626220-
  1902 0000155C 20203A20           
  1903                                  thregupnib:
  1904 00001560 585868                  	db 'XXh'
  1905 00001563 0D0A                    	db 0Dh, 0Ah
  1906 00001565 0D0A                    	db 0Dh, 0Ah
  1907 00001567 53697A652028696E20-     	db 'Size (in sectors)   : '
  1907 00001570 736563746F72732920-
  1907 00001579 20203A20           
  1908                                  tdisksize:
  1909 0000157D 585858585858585868      	db 'XXXXXXXXh'
  1910 00001586 0D0A                    	db 0Dh, 0Ah
  1911 00001588 0D0A00                  	db 0Dh, 0Ah, 0
  1912                                  
  1913                                  hex_digits:
  1914                                  hexchrs:
  1915 0000158B 303132333435363738-     	db '0123456789ABCDEF'
  1915 00001594 39414243444546     
  1916                                  
  1917                                  ds_drv:
  1918 0000159B FF                      	db 0FFh ; Current drive (on display)
  1919 0000159C 00                       	db 0    ; Current half (0 or >0)
  1920                                  
  1921                                  drv_names:
  1922 0000159D 666430206664312068-     	db 'fd0 fd1 hd0 hd1 hd2 hd3 '
  1922 000015A6 643020686431206864-
  1922 000015AF 322068643320       
  1923                                  
  1924                                  dpheader:
  1925 000015B5 204472697665203A20      	db ' Drive : '
  1926                                  drv_name:
  1927 000015BE 3030302020              	db '000  '
  1928 000015C3 536563746F72203A20      	db  'Sector : '
  1929                                  sector_num:
  1930 000015CC 464646464646464668      	db  'FFFFFFFFh'
  1931 000015D5 00                              db 0
  1932                                  
  1933                                  sdline:
  1934 000015D6 204279746520            	db ' Byte '
  1935                                  sdline_1:
  1936 000015DC 30303068                	db '000h'
  1937 000015E0 202D2020                	db ' -  '
  1938                                  sdline_2:
  1939 000015E4 303020303020303020-     	db '00 00 00 00 00 00 00 00 '
  1939 000015ED 303020303020303020-
  1939 000015F6 303020303020       
  1940 000015FC 303020303020303020-     	db '00 00 00 00 00 00 00 00 '
  1940 00001605 303020303020303020-
  1940 0000160E 303020303020       
  1941 00001614 20                      	db ' '
  1942                                  sdline_3:
  1943 00001615 2E2E2E2E2E2E2E2E2E-     	db '................'
  1943 0000161E 2E2E2E2E2E2E2E     
  1944 00001625 20                      	db 20h
  1945                                  
  1946                                  dpfooter1:
  1947 00001626 204631203D20436861-     	db ' F1 = Change Drive  '
  1947 0000162F 6E6765204472697665-
  1947 00001638 2020               
  1948 0000163A 486F6D65203D204669-     	db 'Home = First Sector '
  1948 00001643 72737420536563746F-
  1948 0000164C 7220               
  1949 0000164E 50675570203D205072-     	db 'PgUp = Previous Sector '
  1949 00001657 6576696F7573205365-
  1949 00001660 63746F7220         
  1950 00001665 455343203D20455849-     	db 'ESC = EXIT'
  1950 0000166E 54                 
  1951 0000166F 00                      	db 0
  1952                                  dpfooter2:
  1953 00001670 204632203D20436861-     	db ' F2 = Change Sector '
  1953 00001679 6E676520536563746F-
  1953 00001682 7220               
  1954 00001684 456E64203D204C6173-     	db 'End = Last Sector   '
  1954 0000168D 7420536563746F7220-
  1954 00001696 2020               
  1955 00001698 5067446F776E203D20-     	db 'PgDown = Next Sector   ' 
  1955 000016A1 4E6578742053656374-
  1955 000016AA 6F72202020         
  1956 000016AF 454E544552203D2050-     	db 'ENTER = Prv/Nxt'
  1956 000016B8 72762F4E7874       
  1957 000016BE 00                      	db 0
  1958                                  
  1959                                  F1_ib:
  1960 000016BF 10                      	db 16	; box width (columns)
  1961 000016C0 03                      	db 3	; box height (rows)
  1962 000016C1 01                      	db 1	; label offset (vertical)
  1963 000016C2 01                      	db 1	; label offset (horizontal)
  1964 000016C3 01                      	db 1	; text (input) size
  1965 000016C4 4E                      	db 4Eh	; box color
  1966 000016C5 44726976653A20          	db 'Drive: '  ; Label
  1967 000016CC 00                      	db 0
  1968                                  
  1969                                  F2_ib:
  1970 000016CD 14                      	db 20	; box width (columns)
  1971 000016CE 03                      	db 3	; box height (rows)
  1972 000016CF 01                      	db 1	; label offset (vertical)
  1973 000016D0 01                      	db 1	; label offset (horizontal)
  1974 000016D1 08                      	db 8	; text (input) size
  1975 000016D2 4E                      	db 4Eh	; box color
  1976 000016D3 536563746F72203A20      	db 'Sector : '  ; Label
  1977 000016DC 00                      	db 0
  1978                                  
  1979                                  dskr_err:
  1980 000016DD 21                      	db 33	; box width (columns)
  1981                                  	;db 17	
  1982 000016DE 03                      	db 3	; box height (rows)
  1983 000016DF 01                      	db 1	; label offset (vertical)
  1984 000016E0 01                      	db 1	; label offset (horizontal)
  1985 000016E1 00                      	db 0	; text (input) size
  1986 000016E2 4E                      	db 4Eh	; box color
  1987 000016E3 4472697665206E6F74-     	db 'Drive not ready or read error !'  ; Label
  1987 000016EC 207265616479206F72-
  1987 000016F5 207265616420657272-
  1987 000016FE 6F722021           
  1988                                  	;db ' Error : '
  1989                                  ;err_code_str:
  1990                                  ;	db '00h ! '	
  1991 00001702 00                      	db 0
  1992                                  
  1993                                  	; 28/08/2020
  1994                                  VPRMS:
  1995 00001703 07                      	db 07h
  1996 00001704 0D0A                    	db 0Dh, 0Ah
  1997 00001706 4469736B20              	db 'Disk '
  1998                                  vprm_drv:
  1999 0000170B 58202D20                	db 'X - '	
  2000 0000170F 4449534B2053495A45-     	db 'DISK SIZE AND (VIRTUAL) CHS VALUES'
  2000 00001718 20414E442028564952-
  2000 00001721 5455414C2920434853-
  2000 0000172A 2056414C554553     
  2001 00001731 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  2002 00001735 4469736B2053697A65-     	db 'Disk Size : '
  2002 0000173E 203A20             
  2003                                  lbadisksize:
  2004 00001741 585858585858585868-     	db 'XXXXXXXXh sectors'		
  2004 0000174A 20736563746F7273   
  2005 00001752 0D0A0D0A                 	db 0Dh, 0Ah, 0Dh, 0Ah
  2006                                  
  2007 00001756 43796C696E64657273-     	db 'Cylinders : '
  2007 0000175F 203A20             
  2008                                  vcylinders:
  2009 00001762 5858585868              	db 'XXXXh'
  2010 00001767 0D0A                    	db 0Dh, 0Ah
  2011 00001769 486561647320202020-     	db 'Heads     : '
  2011 00001772 203A20             
  2012                                  vheads:
  2013 00001775 585868                  	db 'XXh'
  2014 00001778 0D0A                    	db 0Dh, 0Ah
  2015 0000177A 536563746F72732020-     	db 'Sectors   : '
  2015 00001783 203A20             
  2016                                  vspt:
  2017 00001786 585868                  	db 'XXh'
  2018 00001789 0D0A                    	db 0Dh, 0Ah
  2019 0000178B 0D0A00                  	db 0Dh, 0Ah, 0	
  2020                                  
  2021                                  ; Additional functions, variables/pointers for 
  2022                                  ; Real Mode adaption (out of unix386.s) variables/pointers
  2023                                  
  2024                                  set_cpos:
  2025 0000178E 668B15[60180000]        	mov	dx, [cursor_posn] ; dh = row, dl = column
  2026                                  set_cposx:
  2027                                  	; DX = cursor position
  2028 00001795 B402                    	mov	ah, 2		; Set cursor position
  2029 00001797 30FF                    	xor	bh, bh		; for video page 0
  2030 00001799 CD31                    	int	31h		; TRDOS 386 video interrupt
  2031 0000179B C3                      	retn
  2032                                  
  2033                                  align 2
  2034                                  
  2035                                  prg_msg:
  2036 0000179C 0D0A07                  	db 0Dh, 0Ah, 07h
  2037 0000179F 4469736B2052656164-     	db 'Disk Read Utility - TRDOS 386 v2 Disk I/O and timer test.'
  2037 000017A8 205574696C69747920-
  2037 000017B1 2D205452444F532033-
  2037 000017BA 383620763220446973-
  2037 000017C3 6B20492F4F20616E64-
  2037 000017CC 2074696D6572207465-
  2037 000017D5 73742E             
  2038 000017D8 0D0A                    	db 0Dh, 0Ah	
  2039                                  	;db 'by Erdogan Tan  [07/07/2016]'
  2040 000017DA 6279204572646F6761-     	db 'by Erdogan Tan  [26/10/2020]'   ; LBA disk (>8GB) bugfix
  2040 000017E3 6E2054616E20205B32-
  2040 000017EC 362F31302F32303230-
  2040 000017F5 5D                 
  2041 000017F6 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  2042 000017FA 28507265737320616E-             db '(Press any key to continue...)'
  2042 00001803 79206B657920746F20-
  2042 0000180C 636F6E74696E75652E-
  2042 00001815 2E2E29             
  2043 00001818 0D0A00                  	db 0Dh, 0Ah, 0
  2044                                  
  2045                                  drv_not_ready:
  2046 0000181B 070D0A                  	db 07h, 0Dh, 0Ah 
  2047 0000181E 4472697665206E6F74-     	db 'Drive not ready !'
  2047 00001827 2072656164792021   
  2048 0000182F 0D0A00                  	db 0Dh, 0Ah, 0
  2049                                  
  2050 00001832 30                      fd0_type: db '0'
  2051 00001833 30                      fd1_type: db '0'
  2052                                  
  2053                                  rtc_msg:
  2054 00001834 5265616C2054696D65-     	db "Real Time Clock - "
  2054 0000183D 20436C6F636B202D20 
  2055                                  datestr:
  2056 00001846 30302F30302F303030-     	db "00/00/0000"
  2056 0000184F 30                 
  2057 00001850 2020                    	db "  "
  2058                                  timestr:	
  2059 00001852 30303A30303A3030                db "00:00:00"
  2060                                  rtc_msg_end:
  2061 0000185A 00                      	db 0
  2062                                  
  2063                                  timer_event:
  2064 0000185B 00                      	db 0 
  2065                                  
  2066                                  align 4 ; dword alignment
  2067                                  
  2068 0000185C [741B0000]              current_txtpos: dd video_buffer
  2069                                  
  2070                                  bss_start:
  2071                                  
  2072                                  ABSOLUTE bss_start
  2073                                  
  2074 00001860 ????                    cursor_posn: resw 1
  2075 00001862 ????                    cursor_shp:  resw 1
  2076 00001864 ????                    cursor_posb: resw 1 ; (cursor position backup, for video page 0)
  2077                                  
  2078 00001866 ??                      txtposoff:   resb 1 ; txtpos offset for sector number input	
  2079 00001867 ??                      dscmd:	     resb 1 ; 0 = change drive
  2080                                  	            ; 1 = change sector
  2081                                  	            ; 2 = display disk parameters
  2082                                  
  2083 00001868 ??                      inds:	     resb 1 	 
  2084 00001869 ??                      paragr:	     resb 1	 
  2085                                  
  2086 0000186A ??                      ibcp:	     resb 1 ; input box - row position
  2087 0000186B ??                      	     resb 1 ; input box - column position
  2088                                  
  2089 0000186C ??                      retry_count: resb 1
  2090 0000186D ??                      drv:	     resb 1  ; physical drive number (0, 1, 80h, 81h, 82h, 83h)
  2091                                  
  2092 0000186E ????                    drv_status:  resb 2  ; fd0, fd1 (FFh = failure, 80h = existing)		
  2093 00001870 ????????                	     resb 4  ; hd0, hd1 hd2, hd3 (FFh = failure)
  2094                                                      ;                   (80h - 87h = existing)
  2095                                                      ;                   (bit 0 = 1 : LBA ready)
  2096                                  
  2097 00001874 <res Ch>                drv_cylinders :	resw 6
  2098 00001880 <res Ch>                drv_heads     :	resw 6
  2099 0000188C <res Ch>                drv_spt       :	resw 6
  2100                                  alignb 4
  2101 00001898 <res 18h>               drv_size :	resd 6
  2102                                  
  2103 000018B0 <res 10h>               fd0_dpt: resb 16
  2104 000018C0 <res 10h>               fd1_dpt: resb 16
  2105 000018D0 <res 20h>               hd0_dpt: resb 32
  2106 000018F0 <res 20h>               hd1_dpt: resb 32
  2107 00001910 <res 20h>               hd2_dpt: resb 32
  2108 00001930 <res 20h>               hd3_dpt: resb 32
  2109                                  
  2110                                  ds_sec:
  2111 00001950 ????????                	resd 1 ; Current sector (on display), drv 0		
  2112 00001954 ????????                	resd 1 ; Current sector (on display), drv 1
  2113 00001958 ????????                	resd 1 ; Current sector (on display), drv 2
  2114 0000195C ????????                	resd 1 ; Current sector (on display), drv 3
  2115 00001960 ????????                	resd 1 ; Current sector (on display), drv 4
  2116 00001964 ????????                	resd 1 ; Current sector (on display), drv 5
  2117                                  
  2118 00001968 ????????                prev_sec: resd 1  ; previous sector (before reading)	
  2119                                  
  2120                                  sector_buffer:
  2121 0000196C <res 200h>              	resb 512
  2122                                  
  2123                                  date_day:
  2124 00001B6C ??                      	resb 1
  2125                                  date_month:
  2126 00001B6D ??                      	resb 1
  2127                                  date_year:
  2128 00001B6E ??                      	resb 1
  2129                                  date_century:
  2130 00001B6F ??                      	resb 1
  2131                                  
  2132                                  time_second:
  2133 00001B70 ??                      	resb 1
  2134                                  time_minute:
  2135 00001B71 ??                      	resb 1
  2136                                  time_hour:
  2137 00001B72 ??                      	resb 1
  2138                                  	
  2139 00001B73 ??                      	resb 1
  2140                                  
  2141                                  video_buffer:
  2142 00001B74 <res FA0h>              	resb	4000 ; 80*25*2
  2143                                  
  2144                                  timer_event_number:
  2145 00002B14 ??                      	resb 1
  2146                                  
  2147 00002B15 ??                      hdc:	resb 1
  2148 00002B16 ??                      fdc:	resb 1
  2149                                  
  2150                                  prev_drv:
  2151 00002B17 ??                      	resb 1
  2152                                  
  2153                                  alignb 4
  2154                                  
  2155                                  bss_end:
  2156                                  	
  2157                                  _end:
