     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: 22/11/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 B918130000              	mov	ecx, bss_end - bss_start
    46 00000005 66C1E902                	shr	cx, 2 ; dword count
    47 00000009 BF[4C180000]            	mov	edi, bss_start
    48                                  	; eax = 0
    49                                  	;xor	eax, eax
    50 0000000E F3AB                    	rep	stosd
    51                                  	
    52 00000010 BE[88170000]                    mov     esi, prg_msg
    53 00000015 E8D50D0000              	call	print_msg
    54                                  
    55                                  	;; 22/11/2020
    56                                  	;; set current sectors (of all possible disk drives)
    57                                  	;; to invalid value
    58                                  	;xor	eax, eax
    59                                  	;dec	eax  ; 0FFFFFFFFh
    60                                  	;mov	edi, ds_sec
    61                                  	;mov	cl, 6 ; 6 physical disk drives
    62                                  	;rep	stosd
    63                                  
    64                                  	; Filling disk parameters tables
    65                                  _fd0:
    66                                  	;xor	dl, dl ; fd0
    67                                  	;mov	[drv], dl
    68 0000001A BB[9C180000]            	mov	ebx, fd0_dpt
    69 0000001F B408                    	mov	ah, 08h	; return disk parameters
    70 00000021 CD33                      	int	33h	; TRDOS 386 disk io interrupt
    71 00000023 724B                    	jc	short _hd0
    72 00000025 C605[5A180000]80        	mov	byte [drv_status], 80h
    73 0000002C 001D[1E180000]          	add	[fd0_type], bl
    74 00000032 8815[622B0000]          	mov	[fdc], dl
    75 00000038 E895080000              	call	set_disk_parms
    76 0000003D FE0D[622B0000]          	dec	byte [fdc]
    77 00000043 742B                    	jz	short _hd0
    78                                  _fd1:
    79 00000045 B201                    	mov	dl, 1 ; fd1
    80 00000047 8815[59180000]          	mov	[drv], dl
    81 0000004D BB[AC180000]            	mov	ebx, fd1_dpt
    82 00000052 B408                    	mov	ah, 08h	; return disk parameters
    83 00000054 CD33                      	int	33h	; TRDOS 386 disk io interrupt
    84 00000056 7218                    	jc	short _hd0
    85 00000058 C605[5B180000]80        	mov	byte [drv_status+1], 80h
    86 0000005F 001D[1F180000]          	add	[fd1_type], bl
    87 00000065 E868080000              	call	set_disk_parms
    88 0000006A FE0D[622B0000]                  dec     byte [fdc] ; = 0 
    89                                  _hd0:
    90 00000070 B280                    	mov	dl, 80h ; hd0
    91 00000072 8815[59180000]          	mov	[drv], dl
    92 00000078 BB[BC180000]            	mov	ebx, hd0_dpt
    93 0000007D B408                    	mov	ah, 08h	; return disk parameters
    94 0000007F CD33                      	int	33h	; TRDOS 386 disk io interrupt
    95 00000081 7218                    	jc	short _hd1
    96 00000083 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
    97 00000086 C0E806                  	shr	al, 6 ; bit 6 = bit 0
    98 00000089 0480                    	add	al, 80h
    99 0000008B A2[5C180000]            	mov	[drv_status+2], al
   100 00000090 8815[612B0000]          	mov	[hdc], dl
   101 00000096 E837080000              	call	set_disk_parms
   102                                  _hd1:
   103                                  	; 27/10/2020
   104 0000009B FE0D[612B0000]          	dec	byte [hdc]  ; number of fixed disk drives - 1
   105 000000A1 747F                    	jz	sccps
   106 000000A3 B281                    	mov	dl, 81h ; hd1
   107 000000A5 8815[59180000]          	mov	[drv], dl
   108 000000AB BB[DC180000]            	mov	ebx, hd1_dpt
   109 000000B0 B408                    	mov	ah, 08h	; return disk parameters
   110 000000B2 CD33                      	int	33h	; TRDOS 386 disk io interrupt
   111 000000B4 7212                    	jc	short _hd2
   112 000000B6 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   113 000000B9 C0E806                  	shr	al, 6 ; bit 6 = bit 0
   114 000000BC 0480                    	add	al, 80h
   115 000000BE A2[5D180000]            	mov	[drv_status+3], al
   116 000000C3 E80A080000              	call	set_disk_parms
   117                                  _hd2:
   118 000000C8 FE0D[612B0000]          	dec	byte [hdc]
   119 000000CE 7452                    	jz	short sccps
   120 000000D0 B282                    	mov	dl, 82h ; hd2
   121 000000D2 8815[59180000]          	mov	[drv], dl
   122 000000D8 BB[FC180000]            	mov	ebx, hd2_dpt
   123 000000DD B408                    	mov	ah, 08h	; return disk parameters
   124 000000DF CD33                      	int	33h	; TRDOS 386 disk io interrupt
   125 000000E1 7212                    	jc	short _hd3
   126 000000E3 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   127 000000E6 C0E806                  	shr	al, 6 ; bit 6 = bit 0
   128 000000E9 0480                    	add	al, 80h
   129 000000EB A2[5E180000]            	mov	[drv_status+4], al
   130 000000F0 E8DD070000              	call	set_disk_parms
   131                                  _hd3:
   132 000000F5 FE0D[612B0000]          	dec	byte [hdc] ; 27/10/2020
   133 000000FB 7425                    	jz	short sccps
   134 000000FD B283                    	mov	dl, 83h ; hd3
   135 000000FF 8815[59180000]          	mov	[drv], dl
   136 00000105 BB[1C190000]            	mov	ebx, hd3_dpt
   137 0000010A B408                    	mov	ah, 08h	; return disk parameters
   138 0000010C CD33                      	int	33h	; TRDOS 386 disk io interrupt
   139 0000010E 7212                    	jc	short sccps
   140 00000110 8A4314                  	mov	al, [ebx+16+4] ; device register, bit 6 = LBA bit
   141 00000113 C0E806                  	shr	al, 6 ; bit 6 = bit 0
   142 00000116 0480                    	add	al, 80h
   143 00000118 A2[5F180000]            	mov	[drv_status+5], al
   144 0000011D E8B0070000              	call	set_disk_parms
   145                                  sccps:
   146 00000122 FE0D[612B0000]          	dec	byte [hdc] ; = 0 ; 27/10/2020
   147                                  
   148                                  	; get cursor position
   149 00000128 31DB                    	xor	ebx, ebx ; bh = video page 0
   150 0000012A B403                    	mov	ah, 03h	; get cursor position and shape
   151 0000012C CD31                    	int	31h 	; TRDOS 386 video interrupt
   152                                  			; (IBM PC/AT ROMBIOS, INT 10h) 	
   153 0000012E 668915[4C180000]        	mov	[cursor_posn], dx ; position
   154 00000135 66890D[4E180000]        	mov	[cursor_shp], cx ; shape
   155                                  
   156                                  	; Save video page (before displaying sector)
   157                                  
   158                                  	; copy video page 0 to video page 6
   159                                  	;sub	ebx, ebx ; bl = 0 -> system to system
   160                                  			 ; bh = 0 -> 80*25 text mode 
   161 0000013C 28C9                    	sub	cl, cl   ; source = video page 0
   162 0000013E B206                    	mov	dl, 6    ; destination = video page 6
   163 00000140 B81F000000              	mov	eax, 31  ; 'sysvideo'
   164 00000145 CD40                    	int	40h	 ; TRDOS 386 system call  
   165                                  
   166                                  display_sectors:
   167 00000147 E868070000              	call	hide_cursor
   168                                  	; Save cursor position
   169 0000014C 66A1[4C180000]          	mov	ax, [cursor_posn] ; cursor pos. 
   170                                  				  ; for video page 0
   171 00000152 66A3[50180000]          	mov	[cursor_posb], ax
   172 00000158 E88A050000              	call	clear_frame
   173                                  
   174                                  	; start (Real Time Clock) timer function
   175 0000015D B3FF                            mov     bl, 0FFh ; signal return (response) byte
   176 0000015F B703                            mov     bh, 3    ; 1 second (rtc interrupt) 
   177                                  	;mov	ecx, 1
   178 00000161 66B90100                	mov	cx, 1
   179 00000165 BA[47180000]            	mov	edx, timer_event ; signal return (response) address
   180 0000016A B821000000              	mov	eax, 33	; 'systimer'
   181 0000016F CD40                    	int	40h	; TRDOS 386 system call
   182 00000171 7253                            jc      short dscl_0
   183                                  
   184 00000173 A2[602B0000]            	mov	[timer_event_number], al 
   185                                  
   186 00000178 EB4C                    	jmp	short dscl_0
   187                                  
   188                                  dscl_esc:
   189 0000017A E81E040000              	call	restore_video_page
   190                                  dscl_getc:
   191 0000017F E8BF030000              	call	getch
   192                                  	;
   193 00000184 3C1B                    	cmp	al, ESCKey
   194 00000186 0F847C030000                    je      dscl_exit
   195 0000018C C605[53180000]00        	mov	byte [dscmd], 0 ; reset
   196                                  	; 29/08/2020
   197 00000193 663D003B                	cmp	ax, F1Key
   198 00000197 0F82D3020000            	jb	dscl_6	
   199 0000019D 7427                    	je	short dscl_0 ; [dscmd] = 0
   200                                  	; 28/08/2020
   201 0000019F 663D003E                	cmp	ax, F4Key
   202                                  	;ja	dscl_6 ; not one of F1 to F4 functions
   203 000001A3 0F87D7020000            	ja	dscl_29 ; 29/08/2020
   204 000001A9 7209                    	jb	short dscl_f3 ; F3key or F2Key
   205                                  dscl_f4:
   206 000001AB C605[53180000]03        	mov	byte [dscmd], 3 ; Display disk size (and CHS)
   207 000001B2 EB12                    	jmp	short dscl_0
   208                                  dscl_f3:
   209                                  	; 29/08/2020
   210                                  	;cmp	ax, F1Key
   211                                          ;je	short dscl_0 ; [dscmd] = 0
   212                                  	;
   213 000001B4 FE05[53180000]          	inc	byte [dscmd] ; 1
   214                                  	; 28/08/2020
   215                                  	;cmp	ax, F3Key
   216                                  	;jb	short dscl_5 ; F2Key
   217                                  	; 29/08/2020
   218 000001BA 663D003C                	cmp	ax, F2Key
   219 000001BE 7430                    	je	short dscl_5
   220                                  	; 28/08/2020
   221 000001C0 FE05[53180000]          	inc	byte [dscmd] ; 2
   222                                  	; Display disk parameters (HDPT table)
   223                                  dscl_0:
   224 000001C6 E8C4030000              	call	save_video_page
   225 000001CB BE[AA160000]            	mov	esi, F1_ib ; F1 (Change drive)
   226                                  			   ; Inputbox address
   227                                  dscl_ib:
   228 000001D0 E82E060000              	call	inputbox
   229                                  		; cursor position in DX
   230 000001D5 E8E1060000              	call	show_cursor
   231                                  		; cursor blinks at current position
   232 000001DA 8B0D[54190000]          	mov	ecx, [prev_sec]
   233                                  dscl_3:
   234 000001E0 E85E030000              	call	getch
   235 000001E5 3C1B                    	cmp	al, ESCKey
   236 000001E7 7513                    	jne	short dscl_27
   237 000001E9 E8C6060000                      call    hide_cursor
   238 000001EE EB8A                            jmp     dscl_esc
   239                                  dscl_5:
   240                                  	; 28/08/2020
   241                                  	;cmp	ax, F2Key
   242                                  	;jne	dscl_6
   243 000001F0 E89A030000              	call	save_video_page
   244 000001F5 BE[B8160000]            	mov	esi, F2_ib ; F2 (Change sector)
   245                                  		           ; Inputbox address
   246                                  	;mov	byte [dscmd], 1
   247 000001FA EBD4                            jmp     short dscl_ib
   248                                  dscl_27:
   249 000001FC 3C20                    	cmp	al, SPACEKey
   250 000001FE 7444                    	je	short dscl_4	
   251 00000200 3C0D                         	cmp	al, ENTERKey
   252 00000202 7440                    	je	short dscl_4
   253                                  	;
   254 00000204 31DB                    	xor	ebx, ebx
   255 00000206 803D[53180000]01            	cmp     byte [dscmd], 1
   256 0000020D 0F8481000000            	je	dscl_12
   257                                  	;
   258 00000213 3C30                    	cmp	al, '0'
   259 00000215 72C9                    	jb	short dscl_3
   260 00000217 3C35                    	cmp	al, '5'
   261 00000219 77C5                    	ja	short dscl_3
   262 0000021B 8B3D[48180000]          	mov	edi, [current_txtpos]
   263 00000221 AA                      	stosb
   264                                  	;
   265                                  	;xor	bh, bh  ; video page 0
   266 00000222 66B90100                	mov	cx, 1   ; character count
   267 00000226 B40A                    	mov	ah, 0Ah ; write chr at current cursor pos.
   268 00000228 CD31                    	int	31h     ; TRDOS 386 video interrupt
   269                                  	;
   270 0000022A 2C30                    	sub	al, '0'
   271 0000022C 88C2                    	mov	dl, al
   272 0000022E 30F6                    	xor	dh, dh
   273 00000230 88C3                    	mov	bl, al
   274 00000232 C0E302                  	shl	bl, 2  ; *4
   275 00000235 81C3[3C190000]          	add	ebx, ds_sec ; current_sector
   276 0000023B 8B0B                    	mov	ecx, [ebx]
   277 0000023D BE[58190000]                    mov     esi, sector_buffer
   278 00000242 EB9C                    	jmp	short dscl_3 
   279                                  dscl_4:
   280 00000244 803D[54180000]00        	cmp	byte [inds],  0 ; display other half or not ?
   281 0000024B 0F8733010000                    ja      dscl_oh         ; other half
   282 00000251 6652                    	push	dx
   283                                  	; save regs (ESI, ECX, DX)
   284 00000253 E85C060000              	call	hide_cursor
   285                                  	; restore regs (ESI, ECX, DX)
   286 00000258 665A                    	pop	dx
   287 0000025A 89C8                    	mov	eax, ecx
   288                                  	;
   289 0000025C 803D[53180000]01        	cmp     byte [dscmd], 1 ; Requested function ?
   290 00000263 0F84DE000000                    je      dscl_17         ; Change sector (F2)
   291 00000269 0F824F010000                    jb      dscl_ns         ; Change drive (F1)
   292                                  
   293                                  	; Display disk parameters (dscmd = 2)
   294 0000026F 80FA02                  	cmp	dl, 2
   295 00000272 7203                    	jb	short dscl_28
   296 00000274 80C27E                  	add	dl, 7Eh
   297                                  dscl_28:
   298                                  	; 28/08/2020
   299 00000277 803D[53180000]03        	cmp	byte [dscmd], 3
   300 0000027E 750A                    	jne	short dscl_dskprm
   301                                  
   302 00000280 E87E0B0000              	call	dskvprm ; disk size and virtual chs parms
   303 00000285 E9F0FEFFFF              	jmp	dscl_esc
   304                                  
   305                                  dscl_dskprm:
   306 0000028A E847080000              	call	dskprm
   307 0000028F E9E6FEFFFF                      jmp     dscl_esc
   308                                  dscl_12:
   309 00000294 663DE053                	cmp	ax, DELKey	; DEL key
   310 00000298 7404                    	je	short dscl_bs
   311 0000029A 3C08                    	cmp	al, BACKSPC	; Backspace key
   312 0000029C 7535                    	jne	short dscl_13
   313                                  dscl_bs:
   314 0000029E 803D[52180000]00        	cmp	byte [txtposoff], 0
   315 000002A5 0F8635FFFFFF                    jna     dscl_3
   316 000002AB FE0D[52180000]          	dec	byte [txtposoff]
   317 000002B1 FE0D[4C180000]          	dec	byte [cursor_posn]
   318 000002B7 E8BD140000              	call	set_cpos
   319 000002BC 0FB61D[52180000]        	movzx	ebx, byte [txtposoff]
   320 000002C3 FE0D[52180000]          	dec	byte [txtposoff]
   321 000002C9 FE0D[4C180000]          	dec	byte [cursor_posn]
   322 000002CF B020                    	mov	al, 20h
   323 000002D1 EB1B                            jmp     short dscl_14
   324                                  dscl_13:
   325 000002D3 8A1D[52180000]          	mov	bl, [txtposoff]
   326 000002D9 80FB08                  	cmp	bl, 8
   327 000002DC 0F83FEFEFFFF                    jnb     dscl_3
   328                                  	;
   329 000002E2 3C30                    	cmp	al, '0'
   330 000002E4 0F82F6FEFFFF                    jb      dscl_3
   331 000002EA 3C39                    	cmp	al, '9'
   332 000002EC 7739                    	ja	short dscl_15
   333                                  dscl_14:
   334 000002EE D0E3                    	shl	bl, 1
   335 000002F0 8B35[48180000]          	mov	esi, [current_txtpos]
   336 000002F6 01F3                    	add	ebx, esi
   337 000002F8 8803                    	mov	[ebx], al
   338                                  	;
   339 000002FA 30FF                    	xor	bh, bh  ; video page 0
   340 000002FC 66B90100                	mov	cx, 1	; character count
   341 00000300 B40A                    	mov	ah, 0Ah ; write chr at current cursor pos.
   342 00000302 CD31                    	int	31h     ; TRDOS 386 video interrupt
   343                                  	;
   344 00000304 803D[52180000]08        	cmp	byte [txtposoff], 8
   345 0000030B 0F8DCFFEFFFF            	jge	dscl_3 ; JGE !
   346 00000311 FE05[52180000]          	inc	byte [txtposoff]
   347 00000317 FE05[4C180000]          	inc	byte [cursor_posn]
   348 0000031D E857140000              	call	set_cpos
   349 00000322 E9B9FEFFFF                      jmp     dscl_3 
   350                                  dscl_15:
   351 00000327 3C41                    	cmp	al, 'A'
   352 00000329 0F82B1FEFFFF                    jb      dscl_3
   353 0000032F 3C46                    	cmp	al, 'F'
   354 00000331 76BB                            jna     short dscl_14
   355                                  dscl_16:
   356 00000333 3C61                    	cmp	al, 'a'
   357 00000335 0F82A5FEFFFF                    jb      dscl_3
   358 0000033B 3C66                    	cmp	al, 'f'
   359 0000033D 0F879DFEFFFF                    ja      dscl_3
   360 00000343 2C20                    	sub	al, 'a' - 'A'
   361 00000345 EBA7                    	jmp	short dscl_14
   362                                  	;
   363                                  dscl_17:
   364 00000347 8B35[48180000]          	mov	esi, [current_txtpos]
   365 0000034D 31C0                    	xor	eax, eax
   366 0000034F A2[52180000]            	mov	byte [txtposoff], al ; 0
   367 00000354 50                      	push	eax  ; sector value (reset)	
   368                                  dscl_18:
   369 00000355 66AD                    	lodsw
   370 00000357 3C30                    	cmp	al, '0'
   371 00000359 7219                    	jb	short dscl_22
   372                                  dscl_19: 
   373 0000035B 29C9                    	sub	ecx, ecx
   374 0000035D BB[76150000]            	mov	ebx, hexchrs
   375                                  dscl_20:
   376 00000362 3A03                    	cmp	al, [ebx]
   377 00000364 7405                    	je	short dscl_21
   378                                  	;cmp	cl, 15
   379                                  	;jnb	short dscl_22
   380 00000366 FEC1                    	inc	cl
   381 00000368 43                      	inc	ebx
   382 00000369 EBF7                    	jmp	short dscl_20
   383                                  dscl_21: 
   384 0000036B 58                      	pop	eax
   385 0000036C C1E004                  	shl	eax, 4	; * 16
   386 0000036F 01C8                    	add	eax, ecx
   387 00000371 50                      	push	eax
   388 00000372 EBE1                    	jmp	short dscl_18
   389                                  dscl_22:
   390 00000374 8A15[86150000]          	mov	dl, [ds_drv]
   391 0000037A 30F6                    	xor	dh, dh
   392 0000037C 58                      	pop	eax
   393 0000037D BE[58190000]                    mov     esi, sector_buffer
   394 00000382 EB3A                            jmp     short dscl_ns
   395                                  dscl_oh:
   396 00000384 8A15[86150000]          	mov	dl, [ds_drv]
   397 0000038A 0FB6DA                  	movzx	ebx, dl
   398 0000038D C0E302                  	shl	bl, 2
   399 00000390 81C3[3C190000]          	add	ebx, ds_sec
   400 00000396 8B03                    	mov	eax, [ebx]
   401 00000398 BE[58190000]                    mov     esi, sector_buffer
   402                                  	;
   403 0000039D 8A35[87150000]          	mov	dh, [ds_drv+1]
   404 000003A3 08F6                    	or	dh, dh
   405 000003A5 7404                    	jz	short dscl_nh ; second half of sector (0->1)
   406 000003A7 30F6                    	xor	dh, dh	      ; reset (0)	
   407 000003A9 EB08                    	jmp	short dscl_nx
   408                                  dscl_nh:
   409 000003AB 81C600010000            	add	esi, 256
   410 000003B1 FEC6                    	inc	dh
   411                                  dscl_nx:
   412 000003B3 8835[87150000]          	mov	[ds_drv+1], dh
   413 000003B9 E991000000                      jmp     dscl_25
   414                                  dscl_ns:
   415 000003BE 8835[87150000]          	mov	[ds_drv+1], dh
   416 000003C4 0FB6DA                  	movzx	ebx, dl
   417 000003C7 C0E302                  	shl	bl, 2
   418 000003CA 81C3[3C190000]          	add	ebx, ds_sec
   419 000003D0 3A15[86150000]          	cmp	dl, [ds_drv]
   420 000003D6 7504                    	jne	short dscl_23
   421 000003D8 3B03                    	cmp	eax, [ebx]
   422 000003DA 7473                    	je	dscl_25
   423                                  dscl_23:
   424 000003DC 8A0D[86150000]          	mov	cl, [ds_drv]
   425 000003E2 880D[632B0000]          	mov	[prev_drv], cl
   426 000003E8 8815[86150000]          	mov	[ds_drv], dl
   427                                  dscl_26:
   428 000003EE 8B0B                    	mov	ecx, [ebx]
   429 000003F0 890D[54190000]          	mov	[prev_sec], ecx
   430 000003F6 8903                    	mov	[ebx], eax
   431 000003F8 E8A9050000              	call	read_disk_sector
   432 000003FD 7336                    	jnc	short dscl_24
   433                                  dscl_rd_err:
   434                                  	;
   435                                  	;mov	al, ah	; error code
   436                                  	;mov	edi, err_code_str
   437                                  	;call	write_hex
   438                                  	;
   439 000003FF BE[C8160000]            	mov	esi, dskr_err ; drive not ready or read error
   440 00000404 E8FA030000              	call	inputbox
   441 00000409 E835010000              	call	getch
   442 0000040E E88A010000              	call	restore_video_page
   443 00000413 0FB61D[632B0000]        	movzx	ebx, byte [prev_drv]
   444 0000041A 881D[86150000]          	mov	[ds_drv], bl
   445 00000420 C0E302                  	shl	bl, 2
   446 00000423 81C3[3C190000]          	add	ebx, ds_sec
   447 00000429 A1[54190000]            	mov	eax, [prev_sec]
   448 0000042E 8903                    	mov	[ebx], eax
   449 00000430 E94AFDFFFF                      jmp     dscl_getc
   450                                  dscl_24:
   451 00000435 668B15[86150000]        	mov	dx, [ds_drv]
   452 0000043C 0FB6DA                  	movzx	ebx, dl
   453 0000043F C0E302                  	shl	bl, 2
   454 00000442 81C3[3C190000]          	add	ebx, ds_sec
   455 00000448 8B03                    	mov	eax, [ebx]
   456 0000044A BE[58190000]                    mov     esi, sector_buffer
   457                                  dscl_25:
   458 0000044F E865010000              	call	display_sector
   459 00000454 E836010000              	call	save_video_page
   460 00000459 E921FDFFFF                      jmp     dscl_getc
   461                                  dscl_11:
   462 0000045E BE[58190000]                    mov     esi, sector_buffer
   463 00000463 8A15[86150000]          	mov	dl, [ds_drv]
   464 00000469 28F6                    	sub	dh, dh	 ; 0 = first half of sector
   465 0000046B E94EFFFFFF                      jmp     dscl_ns
   466                                  dscl_6:	
   467 00000470 3C20                    	cmp	al, SPACEKey
   468 00000472 0F840CFFFFFF                    je      dscl_oh
   469 00000478 3C0D                         	cmp	al, ENTERKey
   470 0000047A 0F8404FFFFFF                    je      dscl_oh
   471                                  dscl_29:
   472 00000480 663DE047                	cmp	ax, HOMEKey
   473 00000484 7504                    	jne	short dscl_7
   474 00000486 31C0                    	xor	eax, eax
   475 00000488 EBD4                    	jmp	short dscl_11
   476                                  dscl_7:
   477 0000048A 663DE04F                	cmp	ax, ENDKey
   478 0000048E 7515                    	jne	short dscl_8
   479 00000490 0FB61D[86150000]        	movzx	ebx, byte [ds_drv]
   480 00000497 C0E302                  	shl	bl, 2
   481 0000049A 81C3[84180000]                  add     ebx, drv_size
   482 000004A0 8B03                    	mov	eax, [ebx]
   483 000004A2 48                      	dec	eax
   484 000004A3 EBB9                    	jmp	short dscl_11
   485                                  dscl_8:
   486 000004A5 663DE051                	cmp	ax, PgDnKey
   487 000004A9 753E                    	jne	short dscl_10
   488 000004AB E810000000              	call	dscl_9
   489 000004B0 40                      	inc	eax
   490 000004B1 39C8                    	cmp	eax, ecx ; last sector
   491 000004B3 0F8605FFFFFF            	jna	dscl_ns
   492 000004B9 31C0                    	xor	eax, eax
   493 000004BB E92EFFFFFF              	jmp	dscl_26 
   494                                  dscl_9:	
   495 000004C0 0FB615[86150000]        	movzx	edx, byte [ds_drv]
   496 000004C7 89D3                    	mov	ebx, edx
   497 000004C9 C0E302                  	shl	bl, 2  ; *4
   498 000004CC 81C3[84180000]                  add     ebx, drv_size
   499 000004D2 8B0B                    	mov	ecx, [ebx]
   500 000004D4 49                      	dec	ecx
   501 000004D5 81EB[84180000]                  sub     ebx, drv_size
   502 000004DB 81C3[3C190000]          	add	ebx, ds_sec ; current sector
   503 000004E1 8B03                    	mov	eax, [ebx]	
   504 000004E3 BE[58190000]                    mov     esi, sector_buffer
   505 000004E8 C3                              retn
   506                                  dscl_10:
   507 000004E9 663DE049                	cmp	ax, PgUpKey
   508 000004ED 0F858CFCFFFF                    jne     dscl_getc
   509 000004F3 E8C8FFFFFF              	call	dscl_9
   510 000004F8 48                      	dec	eax
   511 000004F9 39C8                    	cmp	eax, ecx ; last sector
   512 000004FB 0F86BDFEFFFF            	jna	dscl_ns
   513 00000501 89C8                    	mov	eax, ecx
   514 00000503 E9E6FEFFFF              	jmp	dscl_26
   515                                  
   516                                  dscl_exit:
   517                                  	;
   518                                  	; Stop timer event
   519 00000508 0FB61D[602B0000]        	movzx	ebx, byte [timer_event_number]
   520                                  		; bh = 0 -> stop timer event
   521                                  
   522 0000050F 20DB                    	and	bl, bl
   523 00000511 7409                    	jz	short dscl_rvp
   524 00000513 B821000000              	mov	eax, 33	; 'systimer'
   525 00000518 CD40                    	int	40h	; TRDOS 386 system call
   526                                  
   527 0000051A 28DB                    	sub	bl, bl
   528                                  dscl_rvp:
   529                                  	; Restore video page (before displaying sector)
   530                                  
   531                                  	; copy video page 6 to video page 0
   532                                  	;sub	ebx, ebx ; bl = 0 -> system to system
   533                                  			 ; bh = 0 -> 80*25 text mode 
   534 0000051C B106                    	mov	cl, 6    ; source = video page 6
   535                                  
   536 0000051E E87E000000              	call	restore_v_pg_x
   537                                  
   538                                  	; Restore cursor position
   539 00000523 668B15[50180000]        	mov	dx, [cursor_posb] 
   540                                  	;
   541                                  	; Set cursor position
   542                                  	;xor	bh, bh  ; Video page 0
   543 0000052A B402                    	mov	ah, 2	; set cursor position
   544 0000052C CD31                    	int	31h 	; TRDOS 386 video interrupt
   545                                  	
   546                                  	; Show standard blinking text cursor 
   547 0000052E 668B0D[4E180000]                mov 	cx, [cursor_shp]
   548 00000535 B401                    	mov	ah, 1	; set cursor type
   549 00000537 CD31                    	int	31h 	; TRDOS 386 video interrupt
   550                                  
   551                                  terminate:
   552 00000539 B801000000              	mov	eax, 1	; 'sysexit'
   553 0000053E CD40                    	int	40h	; TRDOS 386 system call
   554                                  haltsys:
   555 00000540 F4                      	hlt
   556 00000541 EBFD                    	jmp	short haltsys
   557                                  
   558                                  getch:
   559                                  dscl_rtc_p:
   560 00000543 803D[47180000]00        	cmp	byte [timer_event], 0
   561 0000054A 7638                    	jna	short dscl_getch
   562                                  
   563                                  	; timer function
   564 0000054C C605[47180000]00        	mov	byte [timer_event], 0
   565                                  		
   566 00000553 BF[501C0000]            	mov	edi, video_buffer + 0A0h + 50h ; Row 1, Column 40
   567 00000558 807F013F                	cmp     byte [edi+1], 3Fh ; cyan (3) Background
   568                                  			; white (F) forecolor 
   569                                  			; (display disk sector frame)
   570 0000055C 752C                    	jne	short dscl_getchar
   571                                  
   572 0000055E 51                      	push	ecx
   573 0000055F 52                      	push	edx
   574                                  
   575 00000560 E8F3010000              	call	rtc_p
   576                                  
   577                                  	; print real time clock content (as formatted)
   578                                  	; to video page line 1, column 40
   579 00000565 BE[501C0000]            	mov	esi, video_buffer + 0A0h + 50h
   580 0000056A B928000100              	mov	ecx, 10028h ; row 1, column 40 (top left)
   581 0000056F BA4E000100                      mov     edx, 10028h + rtc_msg_end - rtc_msg ; (bottom right)
   582                                  			    ; row 1, column 40 + rtc_msg lenth 
   583 00000574 29FF                    	sub	edi, edi ; no swap
   584 00000576 BB05000000              	mov	ebx, 5  ; user to system window transfer (active page)
   585 0000057B B81F000000              	mov	eax, 31 ; 'sysvideo'
   586 00000580 CD40                    	int	40h	; TRDOS 386 system call	
   587                                  
   588 00000582 5A                      	pop	edx
   589 00000583 59                      	pop	ecx
   590                                  	
   591                                  dscl_getch:
   592                                  	; Check keyboard buffer
   593 00000584 B411                    	mov	ah, 11h
   594 00000586 CD32                    	int 	32h ; TRDOS 386 keyboard interrupt
   595                                  		    ; (IBM PC/AT ROMBIOS, INT 16h)			
   596 00000588 74B9                    	jz	short dscl_rtc_p ; keyboard buffer empty
   597                                  
   598                                  dscl_getchar:
   599                                  	; Getchar by using keyboard interrupt
   600 0000058A B410                    	mov	ah, 10h
   601 0000058C CD32                    	int 	32h ; TRDOS 386 keyboard interrupt
   602                                  		    ; (IBM PC/AT ROMBIOS, INT 16h)			
   603 0000058E C3                      	retn
   604                                  		
   605                                  save_video_page:
   606                                  	; Save video page
   607                                  
   608                                  	; copy video page 0 to video page 7
   609 0000058F 29DB                    	sub	ebx, ebx ; bl = 0 -> system to system
   610                                  			 ; bh = 0 -> 80*25 text mode 
   611 00000591 28C9                    	sub	cl, cl   ; source = video page 0
   612 00000593 B207                    	mov	dl, 7    ; destination = video page 7
   613 00000595 B81F000000              	mov	eax, 31  ; 'sysvideo'
   614 0000059A CD40                    	int	40h	 ; TRDOS 386 system call
   615                                  
   616 0000059C C3                      	retn  
   617                                  
   618                                  restore_video_page:
   619                                  	; copy video page 7 to video page 0
   620 0000059D 29DB                    	sub	ebx, ebx ; bl = 0 -> system to system
   621                                  			 ; bh = 0 -> 80*25 text mode 
   622 0000059F B107                    	mov	cl, 7    ; source = video page 7
   623                                  
   624                                  restore_v_pg_x:
   625 000005A1 28D2                    	sub	dl, dl   ; destination = video page 0
   626 000005A3 B81F000000              	mov	eax, 31  ; 'sysvideo'
   627 000005A8 CD40                    	int	40h	 ; TRDOS 386 system call  
   628                                  
   629 000005AA B302                    	mov	bl, 2	 ; system to user
   630                                  	;xor	dl, dl   ; video page 0
   631 000005AC B9[601B0000]            	mov	ecx, video_buffer ; user buffer
   632 000005B1 B81F000000              	mov	eax, 31	 ; 'sysvideo'
   633 000005B6 CD40                     	int	40h	 ; TRDOS 386 system call  
   634                                  	
   635 000005B8 C3                      	retn
   636                                  	
   637                                  display_sector:
   638                                  	; display disk sector data (on video page 0)
   639                                  	;
   640                                  	; INPUT ->
   641                                  	;	ESI = sector buffer offset
   642                                  	; 	      (sector size: 512 bytes)
   643                                  	;	EAX = sector number
   644                                  	;	DL = drive number (0,1,2,3,4,5,6)
   645                                  	;	DH = portion control byte 
   646                                  	;		 (0= first half of the sector, 
   647                                  	;		 >0= second half of the sector) 
   648                                  	; OUTPUT ->
   649                                  	;	Video page 0 (0B8000h) will be filled
   650                                  	;	with sector data
   651                                  	;	(ESI points to byte 256 of the buffer
   652                                  	;	or end of the buffer)	
   653                                  	;
   654                                  	; Modified registers: eax, edx, ecx, ebx, esi, edi
   655                                  	;
   656                                  	;
   657                                  	;xor	ecx, ecx ; reset for cx loop counts
   658 000005B9 C605[54180000]01        	mov	byte [inds], 1 ; for ENTER key handling 
   659                                  	;
   660 000005C0 50                      	push	eax
   661 000005C1 52                      	push	edx
   662 000005C2 E820010000              	call	clear_frame
   663 000005C7 5A                      	pop	edx
   664 000005C8 58                      	pop	eax
   665                                  dsfh:
   666 000005C9 31DB                    	xor	ebx, ebx
   667 000005CB 08F6                    	or	dh, dh
   668 000005CD 7402                    	jz	short dsfh1
   669 000005CF B310                    	mov	bl, 10h
   670                                  dsfh1:
   671 000005D1 881D[55180000]          	mov	[paragr], bl	; Paragraph (16 bytes)
   672                                  	;
   673 000005D7 88D3                    	mov	bl, dl
   674 000005D9 C0E302                  	shl	bl, 2	; *4
   675 000005DC 81C3[88150000]          	add	ebx, drv_names
   676 000005E2 8B13                    	mov	edx, [ebx]
   677 000005E4 8915[A9150000]          	mov	[drv_name], edx
   678 000005EA E8BF000000              	call	dwordtohex
   679 000005EF 8915[B7150000]          	mov	[sector_num], edx
   680 000005F5 A3[BB150000]            	mov	[sector_num+4], eax
   681 000005FA B001                    	mov	al, 1
   682 000005FC B43F                    	mov	ah, 3Fh ; cyan background, white forecolor
   683 000005FE BB[A0150000]            	mov	ebx, dpheader
   684 00000603 E8CC000000              	call	print_line
   685 00000608 B015                    	mov	al, 21
   686                                  	;mov	ah, 3Fh ; cyan background, white forecolor
   687 0000060A BB[11160000]            	mov	ebx, dpfooter1
   688 0000060F E8C0000000              	call	print_line
   689 00000614 B016                    	mov	al, 22
   690                                  	;mov	ah, 3Fh ; cyan background, white forecolor
   691 00000616 BB[5B160000]            	mov	ebx, dpfooter2
   692 0000061B E8B4000000              	call	print_line
   693                                  ds1:
   694 00000620 B910000000              	mov	ecx, 16
   695                                  ds2:
   696 00000625 A0[55180000]            	mov	al, [paragr]
   697 0000062A E841000000              	call	bytetohex
   698 0000062F 66A3[C7150000]          	mov	[sdline_1], ax
   699                                  	;
   700 00000635 51                      	push	ecx
   701 00000636 B110                    	mov	cl, 16
   702 00000638 BF[CF150000]            	mov	edi, sdline_2
   703                                  ds3:
   704 0000063D AC                      	lodsb	
   705 0000063E E82D000000              	call	bytetohex
   706 00000643 66AB                    	stosw
   707 00000645 47                      	inc	edi
   708 00000646 E2F5                    	loop	ds3
   709 00000648 83EE10                  	sub	esi, 16
   710 0000064B 47                      	inc	edi
   711 0000064C B110                    	mov	cl, 16
   712 0000064E F3A4                    	rep	movsb
   713 00000650 59                      	pop	ecx
   714 00000651 B013                    	mov	al, 19	; line (row) 3 to 24
   715 00000653 28C8                    	sub	al, cl
   716 00000655 B407                    	mov	ah, 07h ; Black background, light gray forecolor
   717 00000657 BB[C1150000]            	mov	ebx, sdline
   718 0000065C E85F000000              	call	print_line_80 ; 04/12/2014
   719 00000661 E205                    	loop	ds4
   720                                  	
   721                                  	;call	video_page_update
   722                                  	;retn
   723                                  
   724 00000663 E9B8000000              	jmp	video_page_update
   725                                  ds4:
   726 00000668 FE05[55180000]          	inc	byte [paragr]
   727 0000066E EBB5                    	jmp	short ds2
   728                                  
   729                                  ; Convert binary number to hexadecimal string
   730                                  
   731                                  bytetohex:
   732                                  	; INPUT ->
   733                                  	; 	AL = byte (binary number)
   734                                  	; OUTPUT ->
   735                                  	;	AX = hexadecimal string
   736                                  	;
   737 00000670 53                      	push	ebx
   738 00000671 0FB6D8                  	movzx	ebx, al
   739 00000674 C0EB04                  	shr	bl, 4
   740 00000677 8A9B[76150000]          	mov	bl, [ebx+hexchrs] 	 	
   741 0000067D 86D8                    	xchg	bl, al
   742 0000067F 80E30F                  	and	bl, 0Fh
   743 00000682 8AA3[76150000]          	mov	ah, [ebx+hexchrs] 
   744 00000688 5B                      	pop	ebx	
   745 00000689 C3                      	retn
   746                                  
   747                                  wordtohex:
   748                                  	; INPUT ->
   749                                  	; 	AX = word (binary number)
   750                                  	; OUTPUT ->
   751                                  	;	EAX = hexadecimal string
   752                                  	;
   753 0000068A 53                      	push	ebx
   754 0000068B 86E0                    	xchg	ah, al
   755 0000068D 6650                    	push	ax
   756 0000068F 0FB6DC                  	movzx	ebx, ah
   757 00000692 C0EB04                  	shr	bl, 4
   758 00000695 8A83[76150000]          	mov	al, [ebx+hexchrs] 	 	
   759 0000069B 88E3                    	mov	bl, ah
   760 0000069D 80E30F                  	and	bl, 0Fh
   761 000006A0 8AA3[76150000]          	mov	ah, [ebx+hexchrs]
   762 000006A6 C1E010                  	shl	eax, 16
   763 000006A9 6658                    	pop	ax
   764 000006AB 5B                      	pop	ebx
   765 000006AC EBC2                    	jmp	short bytetohex
   766                                  	;mov	bl, al
   767                                  	;shr	bl, 4
   768                                  	;mov	bl, [ebx+hexchrs] 	 	
   769                                  	;xchg	bl, al	 	
   770                                  	;and	bl, 0Fh
   771                                  	;mov	ah, [ebx+hexchrs] 
   772                                  	;pop	ebx	
   773                                  	;retn
   774                                  
   775                                  dwordtohex:
   776                                  	; INPUT ->
   777                                  	; 	EAX = dword (binary number)
   778                                  	; OUTPUT ->
   779                                  	;	EDX:EAX = hexadecimal string
   780                                  	;
   781 000006AE 50                      	push	eax
   782 000006AF C1E810                  	shr	eax, 16
   783 000006B2 E8D3FFFFFF              	call	wordtohex
   784 000006B7 89C2                    	mov	edx, eax
   785 000006B9 58                      	pop	eax
   786 000006BA E8CBFFFFFF              	call	wordtohex
   787 000006BF C3                      	retn
   788                                  
   789                                  print_line_80:
   790                                  	; 04/12/2014
   791                                  	; al = line (0 to 24)
   792                                  	; ah = color attributes
   793                                  	; ebx = 80 chars string address	
   794 000006C0 E881000000              	call 	get_lpos
   795 000006C5 51                      	push	ecx
   796 000006C6 B950000000              	mov	ecx, 80
   797                                  pl80:
   798 000006CB 8A03                    	mov	al, [ebx]
   799 000006CD 43                      	inc	ebx
   800 000006CE 66AB                    	stosw
   801 000006D0 E2F9                    	loop	pl80
   802 000006D2 59                      	pop	ecx
   803 000006D3 C3                      	retn
   804                                  
   805                                  print_line:
   806                                  	; al = line (0 to 24)
   807                                  	; ah = color attributes	
   808                                  	; ebx = ASCIIZ string address
   809 000006D4 E86D000000              	call	get_lpos
   810 000006D9 56                      	push	esi
   811 000006DA 89DE                    	mov	esi, ebx
   812                                  prl1:
   813 000006DC AC                      	lodsb
   814 000006DD 20C0                    	and	al, al
   815 000006DF 7404                    	jz	short prl2
   816 000006E1 66AB                    	stosw
   817 000006E3 EBF7                    	jmp	short prl1
   818                                  prl2:
   819 000006E5 5E                      	pop	esi
   820 000006E6 C3                      	retn
   821                                  
   822                                  clear_frame:
   823 000006E7 30C0                    	xor	al, al ; Line 0
   824 000006E9 E846000000              	call	clear_line
   825 000006EE B001                    	mov	al, 1
   826 000006F0 B43F                    	mov	ah, 3Fh ; cyan background, white forecolor
   827 000006F2 E83F000000              	call	fill_color
   828 000006F7 B001                    	mov	al, 1
   829                                  dscf0:	
   830 000006F9 FEC0                    	inc	al
   831 000006FB 6650                    	push	ax
   832 000006FD E832000000              	call	clear_line
   833 00000702 6658                    	pop	ax
   834 00000704 3C13                    	cmp	al, 19
   835 00000706 72F1                    	jb	short dscf0
   836                                  	;inc	al ; line 20
   837 00000708 B43F                    	mov	ah, 3Fh
   838                                  dscf1:
   839 0000070A FEC0                    	inc	al
   840 0000070C 6650                    	push	ax
   841 0000070E E823000000              	call	fill_color	  
   842 00000713 6658                    	pop	ax
   843 00000715 3C17                    	cmp	al, 23
   844 00000717 72F1                    	jb	short dscf1
   845 00000719 FEC0                    	inc	al
   846 0000071B E814000000              	call	clear_line
   847                                  
   848                                  	;call	video_page_update
   849                                  	;retn
   850                                  
   851                                  video_page_update:
   852                                  	; copy video buffer content to video page 0
   853 00000720 BB01000000              	mov	ebx, 1	; BL = 1 = user to system
   854 00000725 B200                    	mov	dl, 0	; video page 0
   855 00000727 B9[601B0000]            	mov	ecx, video_buffer
   856 0000072C B81F000000              	mov	eax, 31 ; 'sysvideo'
   857 00000731 CD40                    	int	40h	; TRDOS 386 system call	
   858 00000733 C3                      	retn
   859                                  
   860                                  clear_line:
   861 00000734 30E4                    	xor	ah, ah ; blank
   862                                  fill_color:
   863                                  	; al = line (0 to 24)
   864                                  	; ah = color attributes
   865 00000736 E80B000000              	call	get_lpos
   866 0000073B B950000000              	mov	ecx, 80
   867 00000740 B020                    	mov	al, 20h ; space/blank
   868 00000742 F366AB                  	rep	stosw
   869 00000745 C3                      	retn
   870                                  
   871                                  get_lpos:  ; Get line position in video buffer
   872 00000746 6650                    	push	ax
   873 00000748 B4A0                    	mov	ah, 80*2
   874 0000074A F6E4                    	mul	ah
   875 0000074C 0FB7F8                  	movzx	edi, ax
   876 0000074F 81C7[601B0000]          	add	edi, video_buffer
   877 00000755 6658                    	pop	ax
   878 00000757 C3                      	retn
   879                                  
   880                                  rtc_p:	
   881                                  	; Print Real Time Clock content
   882                                  	;
   883 00000758 B404                    	mov	ah, 4	; read the date
   884 0000075A CD35                    	int	35h	; TRDOS 386 date&time interrupt
   885                                  			; (IBM PC/AT ROMBIOS, INT 1Ah)
   886                                  	;mov	[date_day], dl
   887                                  	;mov	[date_month], dh
   888 0000075C 668915[581B0000]        	mov	[date_day], dx
   889                                  	;mov	[date_year], cl
   890                                  	;mov	[date_century], ch
   891 00000763 66890D[5A1B0000]        	mov	[date_year], cx
   892                                  	;
   893 0000076A B402                    	mov	ah, 2	; read the time
   894 0000076C CD35                    	int	35h	; TRDOS 386 date&time interrupt
   895 0000076E 8835[5C1B0000]                  mov     [time_second], dh
   896                                          ;mov    [time_minute], cl
   897                                          ;mov    [time_hour], ch
   898 00000774 66890D[5D1B0000]                mov     [time_minute], cx
   899                                  	;
   900 0000077B A0[5B1B0000]            	mov	al, [date_century]
   901 00000780 E875000000              	call	bcd_to_ascii
   902 00000785 66A3[38180000]          	mov	word [datestr+6], ax
   903 0000078B A0[5A1B0000]            	mov	al, byte [date_year]
   904 00000790 E865000000              	call	bcd_to_ascii
   905 00000795 66A3[3A180000]          	mov	word [datestr+8], ax
   906 0000079B A0[591B0000]            	mov	al, byte [date_month]
   907 000007A0 E855000000              	call	bcd_to_ascii
   908 000007A5 66A3[35180000]          	mov	word [datestr+3], ax
   909 000007AB A0[581B0000]            	mov	al, byte [date_day]
   910 000007B0 E845000000              	call	bcd_to_ascii
   911 000007B5 66A3[32180000]          	mov	word [datestr], ax
   912                                  	;
   913 000007BB A0[5E1B0000]                    mov     al, byte [time_hour]
   914 000007C0 E835000000              	call	bcd_to_ascii
   915 000007C5 66A3[3E180000]          	mov	word [timestr], ax
   916 000007CB A0[5D1B0000]                    mov     al, byte [time_minute]
   917 000007D0 E825000000              	call	bcd_to_ascii
   918 000007D5 66A3[41180000]          	mov	word [timestr+3], ax
   919 000007DB A0[5C1B0000]                    mov     al, byte [time_second]
   920 000007E0 E815000000              	call	bcd_to_ascii
   921 000007E5 66A3[44180000]          	mov	word [timestr+6], ax
   922                                  	;		
   923 000007EB BE[20180000]            	mov	esi, rtc_msg ; message offset
   924                                  	;
   925                                  	;mov	edi, video_buffer + 0A0h + 050h ; Row 1, Column 40
   926                                  	;mov	ah, [edi+1]
   927                                  	;cmp	ah, 3Fh ; cyan (3) Background
   928                                  			; white (F) forecolor 
   929                                  			; (display disk sector frame)
   930                                  	;jne	short prtcmsg_ok	
   931                                  prtcmsg:
   932 000007F0 AC                      	lodsb
   933 000007F1 08C0                    	or	al, al
   934 000007F3 7404                    	jz	short prtcmsg_ok
   935 000007F5 AA                      	stosb
   936 000007F6 47                      	inc 	edi
   937 000007F7 EBF7                    	jmp	short prtcmsg
   938                                  prtcmsg_ok:
   939 000007F9 C3                      	retn
   940                                  
   941                                  bcd_to_ascii:
   942                                  	; INPUT ->
   943                                  	;	AL = Packed BCD number
   944                                  	; OUTPUT ->
   945                                  	;	AX = ASCII word/number
   946                                  	;
   947 000007FA D410                    	db	0D4h, 10h	; Undocumented inst. AAM
   948                                  				; AH = AL / 10h
   949                                  				; AL = AL MOD 10h
   950 000007FC 660D3030                	or	ax, '00'	; Make it ASCII based
   951                                  
   952 00000800 86E0                            xchg	ah, al 
   953                                  	
   954 00000802 C3                      	retn	
   955                                  
   956                                  inputbox:
   957                                  	; Show an input box for user/keyboard input
   958                                  	; INPUT ->
   959                                  	;	ESI = input structure address 
   960                                  	; OUTPUT ->
   961                                  	;	DX  = cursor position for input
   962                                  	;	input box will be displayed (on tty0)
   963                                  	;
   964                                  	; Modified registers: eax, ebx, ecx, edx, esi, edi
   965                                  
   966 00000803 C605[54180000]00        	mov	byte [inds], 0 ; for ENTER key handling
   967 0000080A 31C9                    	xor	ecx, ecx
   968 0000080C BB[601B0000]            	mov	ebx, video_buffer
   969 00000811 B818500000              	mov	eax, 5018h ; 80, 24
   970 00000816 668B16                  	mov	dx, [esi] ; box width (dl)
   971                                  			  ; box height (dh)
   972 00000819 28F0                    	sub	al, dh
   973 0000081B D0E8                    	shr	al, 1
   974 0000081D A2[57180000]            	mov	[ibcp+1], al ; row
   975 00000822 F6E4                    	mul	ah
   976 00000824 66D1E0                  	shl	ax, 1  ; char + attribute
   977 00000827 01C3                    	add	ebx, eax
   978 00000829 B050                    	mov	al, 80
   979 0000082B 28D0                    	sub	al, dl
   980 0000082D D0E8                    	shr	al, 1 
   981 0000082F A2[56180000]            	mov	[ibcp], al ; column
   982 00000834 D0E0                    	shl	al, 1  ; char + attribute
   983 00000836 28E4                    	sub	ah, ah
   984 00000838 01C3                    	add	ebx, eax
   985 0000083A 8A6605                  	mov	ah, [esi+5] ; color attributes
   986 0000083D B020                    	mov	al, 20h	; space/blank
   987 0000083F 88F1                    	mov	cl, dh ; height
   988                                  ib0:
   989 00000841 51                      	push	ecx
   990 00000842 88D1                    	mov	cl, dl
   991 00000844 89DF                    	mov	edi, ebx	
   992 00000846 F366AB                  	rep	stosw
   993 00000849 59                      	pop	ecx
   994 0000084A 81C3A0000000            	add	ebx, 80*2 ; number of columns * 2
   995 00000850 E2EF                    	loop	ib0
   996                                  	;
   997 00000852 BF[601B0000]            	mov	edi, video_buffer
   998 00000857 A0[57180000]            	mov	al, [ibcp+1] ; row position
   999 0000085C 024602                  	add	al, [esi+2] ; label offset (row)
  1000 0000085F A2[57180000]            	mov	[ibcp+1], al
  1001 00000864 B4A0                    	mov	ah, 80*2
  1002 00000866 F6E4                    	mul	ah
  1003 00000868 01C7                    	add	edi, eax
  1004 0000086A A0[56180000]            	mov	al, [ibcp] ; column position
  1005 0000086F 024603                  	add	al, [esi+3] ; label offset (column)
  1006 00000872 A2[56180000]            	mov	[ibcp], al
  1007 00000877 30E4                    	xor	ah, ah
  1008 00000879 D0E0                    	shl	al, 1
  1009 0000087B 01C7                    	add	edi, eax
  1010 0000087D 89F3                    	mov	ebx, esi
  1011 0000087F 83C606                  	add	esi, 6 ; Label offset
  1012                                  ib2:
  1013 00000882 AC                      	lodsb
  1014 00000883 08C0                    	or	al, al
  1015 00000885 7406                    	jz	short ib3
  1016 00000887 AA                      	stosb
  1017 00000888 47                      	inc 	edi	
  1018 00000889 FEC1                    	inc	cl
  1019 0000088B EBF5                    	jmp	short ib2
  1020                                  ib3:
  1021 0000088D 000D[56180000]          	add	[ibcp], cl ; column position
  1022 00000893 893D[48180000]          	mov	[current_txtpos], edi
  1023                                  	;
  1024 00000899 8A4B04                  	mov	cl, [ebx+4] ; input char count
  1025 0000089C 08C9                    	or	cl, cl
  1026 0000089E 7407                    	jz	short ib5 ; message box (no input)	
  1027 000008A0 B020                    	mov	al, 20h
  1028 000008A2 B407                    	mov	ah, 07h ; black background
  1029                                  			; light gray fore color	
  1030                                  ib4:
  1031 000008A4 F366AB                  	rep	stosw
  1032                                  ib5:	
  1033 000008A7 E874FEFFFF              	call	video_page_update
  1034 000008AC 668B15[56180000]        	mov	dx, [ibcp] ; cursor position
  1035 000008B3 C3                      	retn
  1036                                  
  1037                                  hide_cursor:
  1038                                        	;CH = cursor start line (bits 0-4) 
  1039                                  	;     and options (bits 5-7).
  1040                                  	;CL = bottom cursor line (bits 0-4).
  1041                                  	; when bit 5 of CH is set to 0, the cursor is visible. 
  1042                                  	; when bit 5 is 1, the cursor is not visible. 
  1043                                  	; hide blinking text cursor: 
  1044 000008B4 51                              push	ecx
  1045 000008B5 B520                    	mov 	ch, 32
  1046 000008B7 30FF                    	xor	bh, bh ; video page 0
  1047 000008B9 EB0F                    	jmp	short hc_sc
  1048                                  
  1049                                  show_cursor:
  1050                                    	; dh = row
  1051                                  	; dl = column
  1052 000008BB 51                      	push	ecx
  1053 000008BC 668915[4C180000]        	mov	[cursor_posn], dx
  1054 000008C3 E8B80E0000              	call	set_cposx
  1055                                  	;
  1056                                  	;show box-shaped blinking text cursor
  1057 000008C8 B50D                    	mov	ch, 13
  1058                                  hc_sc:
  1059 000008CA B10F                            mov 	cl, 15
  1060 000008CC B401                            mov 	ah, 1
  1061 000008CE CD31                            int 	31h
  1062 000008D0 59                      	pop	ecx
  1063 000008D1 C3                      	retn
  1064                                  
  1065                                  set_disk_parms:
  1066                                  	; 26/08/2020
  1067 000008D2 8A15[59180000]          	mov	dl, [drv]
  1068 000008D8 80FA80                  	cmp	dl, 80h
  1069 000008DB 7249                    	jb	short set_disk_parms_fd ; floppy
  1070 000008DD 2401                    	and	al, 1  ; LBA ready ?
  1071 000008DF 7451                    	jz	short set_disk_parms_chs
  1072                                  set_disk_parms_lba:
  1073                                  	; 28/08/2020
  1074                                  	;; Translated FDPT
  1075                                  	;mov	ax, [ebx+9]  ; physical cylinders
  1076                                  	;mov	dh, [ebx+11] ; physical heads
  1077                                  	;mov	cl, [ebx+4]  ; physical sectors per track 
  1078                                  	;jmp	short sdp0
  1079                                  
  1080                                  	; 28/08/2020 
  1081                                  	; TRDOS 386 kernel, INT 33h, Function 15h modification
  1082                                  	; (Read DASD type) get disk size function return:
  1083                                  	; ah = 03h (eax = 300h)
  1084                                  	; cx:dx = disk size (LBA disk dize)
  1085                                  	
  1086 000008E1 B415                    	mov	ah, 15h
  1087                                  	;;sub	al, al
  1088                                  	;mov	dl, [drv]
  1089 000008E3 CD33                    	int	33h
  1090                                  	;jnc	short set_disk_parms_lba_exact
  1091                                  
  1092                                  	;; Translated FDPT
  1093                                  	;mov	ax, [ebx+9]  ; physical cylinders
  1094                                  	;mov	dh, [ebx+11] ; physical heads
  1095                                  	;mov	cl, [ebx+4]  ; physical sectors per track 
  1096                                  	;mov	dl, [drv]
  1097                                  	;jmp	short sdp0
  1098                                  
  1099                                  ;set_disk_parms_lba_exact
  1100                                  	; 28/08/2020
  1101 000008E5 6689C8                  	mov	ax, cx ; hw of disk size
  1102 000008E8 C1E010                  	shl	eax, 16
  1103 000008EB 6689D0                  	mov	ax, dx ; lw of disk size
  1104 000008EE 0FB61D[59180000]        	movzx	ebx, byte [drv] ; physical disk drive number
  1105 000008F5 80EB7E                  	sub	bl, 07Eh ; hd0 = 2
  1106 000008F8 C0E302                  	shl	bl, 2 ; * 4
  1107 000008FB 8983[84180000]          	mov	[ebx+drv_size], eax ; 32 bit LBA disk size
  1108 00000901 D0EB                    	shr	bl, 1 ; / 2
  1109 00000903 66C783[6C180000]FF-     	mov	word [ebx+drv_heads], 255 ; virtual heads
  1109 0000090B 00                 
  1110 0000090C 66C783[78180000]3F-     	mov	word [ebx+drv_spt], 63 ; virtual sectors per track
  1110 00000914 00                 
  1111 00000915 B9C13E0000              	mov	ecx, 16065 ; 255*63	
  1112 0000091A 31D2                    	xor	edx, edx
  1113 0000091C F7F1                    	div	ecx
  1114                                  	; eax = ax = cylinders
  1115 0000091E 668983[60180000]        	mov	[ebx+drv_cylinders], ax
  1116 00000925 C3                      	retn
  1117                                  
  1118                                  set_disk_parms_fd:
  1119                                  	;mov	al, ch ; last cylinder (bits 0-7)
  1120                                  	;mov	ah, cl ; 
  1121                                  	;shr	ah, 6  ; last cylinder (bits 8-9)
  1122 00000926 6640                    	inc	ax  ; convert max. cyl number to cyl count
  1123 00000928 88E8                    	mov	al, ch
  1124 0000092A FEC0                    	inc	al
  1125 0000092C 28E4                    	sub	ah, ah
  1126 0000092E FEC6                    	inc	dh  ; convert last head to heads
  1127                                  	;and	cl, 63 ; sectors per track
  1128 00000930 EB09                    	jmp	short sdp0  
  1129                                  
  1130                                  set_disk_parms_chs:
  1131                                  	; Standard FDPT
  1132 00000932 668B03                  	mov	ax, [ebx]  ; physical cylinders
  1133 00000935 8A7302                  	mov	dh, [ebx+2] ; physical heads
  1134 00000938 8A4B0E                  	mov	cl, [ebx+14] ; physical sectors per track 
  1135                                  sdp0:
  1136 0000093B 0FB6DA                  	movzx   ebx, dl
  1137 0000093E 80FB80                  	cmp	bl, 80h
  1138 00000941 7203                    	jb	short sdp1
  1139 00000943 80EB7E                  	sub	bl, 7Eh
  1140                                  sdp1:	
  1141 00000946 D0E3                    	shl	bl, 1
  1142 00000948 81C3[60180000]          	add	ebx, drv_cylinders
  1143 0000094E 668903                  	mov	[ebx], ax
  1144 00000951 6650                    	push	ax ; ** cylinders
  1145 00000953 81EB[60180000]          	sub	ebx, drv_cylinders
  1146 00000959 81C3[6C180000]          	add	ebx, drv_heads
  1147 0000095F 88F0                    	mov	al, dh ; heads
  1148 00000961 30E4                    	xor	ah, ah
  1149 00000963 668903                  	mov	[ebx], ax
  1150 00000966 81EB[6C180000]          	sub     ebx, drv_heads
  1151 0000096C 81C3[78180000]          	add     ebx, drv_spt
  1152 00000972 6683E13F                	and	cx, 3Fh  ; sectors (bits 0-6)
  1153 00000976 66890B                  	mov	[ebx], cx ; sectors per track
  1154 00000979 81EB[78180000]          	sub     ebx, drv_spt
  1155 0000097F 66D1E3                  	shl	bx, 1
  1156 00000982 81C3[84180000]          	add	ebx, drv_size ; disk size (in sectors)
  1157                                  	; LBA size = cylinders * heads * secpertrack
  1158 00000988 66F7E1                  	mul	cx 
  1159 0000098B 6689C2                  	mov	dx, ax ; heads*spt					
  1160 0000098E 6658                    	pop	ax ; ** cylinders
  1161 00000990 803D[59180000]80        	cmp	byte [drv], 80h
  1162 00000997 7202                    	jb	short sdp2
  1163 00000999 6648                    	dec	ax ; 1 cylinder reserved (!?)
  1164                                  sdp2:
  1165 0000099B 66F7E2                  	mul	dx ; cylinders * (heads*spt)		
  1166 0000099E 668903                  	mov	[ebx], ax
  1167 000009A1 66895302                	mov	[ebx+2], dx
  1168                                  	;
  1169 000009A5 C3                      	retn	
  1170                                  
  1171                                  ;set_disk_parms
  1172                                  ;	movzx   ebx, byte [drv]
  1173                                  ;	cmp	bl, 80h
  1174                                  ;	jb	short sdp0
  1175                                  ;	sub	bl, 7Eh
  1176                                  ;sdp0:	
  1177                                  ;	;add	ebx, drv_status
  1178                                  ;	;mov     byte [ebx], 80h ; 'Present' flag
  1179                                  ;	;
  1180                                  ;	mov	al, ch ; last cylinder (bits 0-7)
  1181                                  ;	mov	ah, cl ; 
  1182                                  ;	shr	ah, 6  ; last cylinder (bits 8-9)
  1183                                  ;	;sub	ebx, drv_status
  1184                                  ;	shl	bl, 1
  1185                                  ;	add	ebx, drv_cylinders
  1186                                  ;	inc	ax  ; convert max. cyl number to cyl count		
  1187                                  ;	mov	[ebx], ax
  1188                                  ;	push	ax ; ** cylinders
  1189                                  ;	sub	ebx, drv_cylinders
  1190                                  ;	add	ebx, drv_heads
  1191                                  ;	mov	al, dh ; last head number
  1192                                  ;	xor	ah, ah
  1193                                  ;	inc	ax     ; heads 	
  1194                                  ;	mov	[ebx], ax
  1195                                  ;	sub     ebx, drv_heads
  1196                                  ;	add     ebx, drv_spt
  1197                                  ;	and	cx, 3Fh  ; sectors (bits 0-6)
  1198                                  ;	mov	[ebx], cx
  1199                                  ;	sub     ebx, drv_spt
  1200                                  ;	shl	bx, 1
  1201                                  ;	add	ebx, drv_size ; disk size (in sectors)
  1202                                  ;	; LBA size = cylinders * heads * secpertrack
  1203                                  ;	mul	cx 
  1204                                  ;	mov	dx, ax ; heads*spt					
  1205                                  ;	pop	ax ; ** cylinders
  1206                                  ;	cmp	byte [drv], 80h
  1207                                  ;	jb	short sdp1
  1208                                  ;	dec	ax ; 1 cylinder reserved (!?)
  1209                                  ;sdp1:
  1210                                  ;	mul	dx ; cylinders * (heads*spt)		
  1211                                  ;	mov	[ebx], ax
  1212                                  ;	mov	[ebx+2], dx
  1213                                  ;	;
  1214                                  ;	retn
  1215                                  
  1216                                  read_disk_sector:
  1217                                  	; EAX = sector number (LBA)
  1218                                  	;
  1219 000009A6 0FB61D[86150000]        	movzx	ebx, byte [ds_drv]
  1220 000009AD 88DA                    	mov	dl, bl	
  1221 000009AF 80FA02                  	cmp	dl, 2
  1222 000009B2 7203                    	jb	short rd0
  1223 000009B4 80C27E                  	add	dl, 7Eh  ; 80h, 81h, 82h, 83h
  1224                                  rd0:
  1225 000009B7 89DE                    	mov	esi, ebx
  1226 000009B9 8815[59180000]          	mov	[drv], dl
  1227 000009BF 81C3[5A180000]          	add	ebx, drv_status
  1228 000009C5 8A33                    	mov	dh, [ebx]
  1229                                  rd1:
  1230 000009C7 80FEF0                  	cmp	dh, 0F0h
  1231 000009CA F5                      	cmc
  1232 000009CB 7262                            jc      short rd_lba_fails
  1233                                  	;
  1234 000009CD 89F3                    	mov	ebx, esi
  1235 000009CF C0E302                  	shl	bl, 2
  1236 000009D2 81C3[3C190000]          	add	ebx, ds_sec
  1237 000009D8 8B03                    	mov	eax, [ebx]
  1238 000009DA 81EB[3C190000]          	sub	ebx, ds_sec
  1239 000009E0 81C3[84180000]                  add     ebx, drv_size 
  1240 000009E6 3B03                    	cmp	eax, [ebx] ; Last sector + 1 (number of secs.)
  1241 000009E8 F5                      	cmc
  1242 000009E9 7244                            jc      short rd_lba_fails
  1243                                  	;
  1244 000009EB F6C601                  	test	dh, 1 ; LBA ready ?
  1245 000009EE 7440                            jz      short rd_chs
  1246                                  rd_lba:
  1247                                  	; LBA read (private function)
  1248                                  	;((Retro UNIX 386 v1 - DISK I/O Test))
  1249 000009F0 81C6[5A180000]          	add	esi, drv_status
  1250 000009F6 80268F                  	and	byte [esi], 8Fh ; clear error bits
  1251                                  	;
  1252 000009F9 89C1                    	mov	ecx, eax ; Logical Block/Sector Address
  1253 000009FB C1EB10                  	shr	ebx, 16
  1254 000009FE BB[58190000]                    mov     ebx, sector_buffer
  1255 00000A03 8A15[59180000]          	mov	dl, [drv]
  1256 00000A09 C605[58180000]04        	mov	byte [retry_count], 4
  1257                                  rd_lba_retry:
  1258 00000A10 B41B                    	mov	ah, 1Bh ; LBA read (private function)		
  1259 00000A12 B001                    	mov	al, 1
  1260 00000A14 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1261 00000A16 7317                    	jnc	short rd_lba_ok
  1262                                  
  1263 00000A18 80FC80                  	cmp	ah, 80h ; time out ?
  1264 00000A1B 7411                    	je	short rd_lba_rfails
  1265 00000A1D FE0D[58180000]          	dec	byte [retry_count]
  1266 00000A23 7409                    	jz	short rd_lba_rfails
  1267                                  	
  1268 00000A25 B40D                    	mov	ah, 0Dh ; Alternate reset
  1269 00000A27 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1270 00000A29 73E5                            jnc     short rd_lba_retry
  1271 00000A2B 800EF0                  	or	byte [esi], 0F0h ; drive not ready !
  1272                                  rd_lba_rfails:
  1273 00000A2E F9                      	stc
  1274                                  rd_lba_fails:
  1275                                  rd_lba_ok:
  1276 00000A2F C3                      	retn
  1277                                  	;
  1278                                  	; CHS read (convert LBA address to CHS values)	;	
  1279                                  rd_chs:
  1280 00000A30 D1E6                    	shl	esi, 1
  1281 00000A32 89F3                    	mov	ebx, esi
  1282 00000A34 31D2                    	xor	edx, edx ; 0
  1283 00000A36 29C9                    	sub	ecx, ecx 
  1284 00000A38 81C3[78180000]                  add     ebx, drv_spt
  1285 00000A3E 668B0B                  	mov	cx, [ebx] ; sector per track
  1286                                                  ; EAX = sector address (LBA)
  1287 00000A41 F7F1                    	div	ecx
  1288 00000A43 88D1                    	mov	cl, dl	; sector number - 1
  1289 00000A45 FEC1                    	inc	cl	; sector number (1 based)
  1290 00000A47 6651                    	push	cx
  1291 00000A49 89F3                    	mov	ebx, esi
  1292 00000A4B 81C3[6C180000]                  add     ebx, drv_heads
  1293 00000A51 668B0B                  	mov	cx, [ebx] ; heads
  1294 00000A54 31D2                    	xor	edx, edx
  1295                                  		; EAX = cylinders * heads + head
  1296 00000A56 F7F1                    	div	ecx
  1297 00000A58 6659                    	pop	cx     ; sector number
  1298 00000A5A 88D6                    	mov	dh, dl ; head number
  1299 00000A5C 8A15[59180000]          	mov	dl, [drv]
  1300 00000A62 88C5                    	mov	ch, al ; cylinder (bits 0-7)
  1301 00000A64 C0E406                  	shl	ah, 6
  1302 00000A67 08E1                    	or	cl, ah ; cylinder (bits 8-9)
  1303                                  		       ; sector (bits 0-7)
  1304 00000A69 BB[58190000]                    mov     ebx, sector_buffer
  1305                                  		; CL = sector (bits 0-6)
  1306                                  		;      cylinder (bits 7-8 -> bits 8-9)
  1307                                  		; CH = cylinder (bits 0-7)
  1308                                  		; DH = head
  1309                                  		; DL = drive
  1310                                  
  1311 00000A6E D1EE                    	shr	esi, 1 ; drive index (byte alignment)
  1312 00000A70 81C6[5A180000]          	add	esi, drv_status
  1313 00000A76 80268F                  	and	byte [esi], 8Fh ; clear error bits
  1314                                  	;
  1315 00000A79 C605[58180000]04        	mov	byte [retry_count], 4
  1316                                  rd_retry:	
  1317 00000A80 B402                    	mov	ah, 02h ; read sectors
  1318 00000A82 B001                    	mov	al, 1 ; sector count	
  1319 00000A84 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1320 00000A86 7320                    	jnc	short rd_ok
  1321 00000A88 80FC80                  	cmp	ah, 80h ; time out ?
  1322 00000A8B 7408                    	je	short rd_rfails
  1323 00000A8D FE0D[58180000]          	dec	byte [retry_count]
  1324 00000A93 7502                    	jnz	short rd_reset
  1325                                  rd_rfails:
  1326 00000A95 F9                      	stc
  1327                                  rd_fails:
  1328 00000A96 C3                      	retn
  1329                                  rd_reset:
  1330 00000A97 28E4                    	sub	ah, ah
  1331 00000A99 80FA80                  	cmp	dl, 80h
  1332 00000A9C 7202                    	jb	short rd_fd_reset
  1333 00000A9E B40D                    	mov	ah, 0Dh ; Alternate reset
  1334                                  rd_fd_reset:
  1335 00000AA0 CD33                    	int	33h	; TRDOS 386 disk io interrupt
  1336 00000AA2 73DC                            jnc     short rd_retry
  1337 00000AA4 800EF0                  	or	byte [esi], 0F0h ; drive not ready !
  1338 00000AA7 F9                      	stc
  1339                                  rd_ok:
  1340 00000AA8 C3                      	retn
  1341                                  
  1342                                  clear_screen:
  1343 00000AA9 BF[601B0000]            	mov	edi, video_buffer
  1344 00000AAE B9D0070000              	mov	ecx, 80*25
  1345 00000AB3 66B82007                        mov     ax, 0720h ; light gray char space (blank)
  1346 00000AB7 F366AB                  	rep	stosw
  1347                                  
  1348 00000ABA E861FCFFFF              	call	video_page_update
  1349                                  
  1350 00000ABF 6631D2                          xor     dx, dx    ; column 0, row 0
  1351 00000AC2 E9B90C0000              	jmp	set_cposx ; set cursor position
  1352                                  
  1353                                  rfdp_err:
  1354 00000AC7 E8DDFFFFFF              	call	clear_screen
  1355 00000ACC BE[07180000]            	mov	esi, drv_not_ready
  1356 00000AD1 E919030000              	jmp	print_msg	
  1357                                  
  1358                                  dskprm:
  1359                                  	; DISPLAY DISK PARAMETERS TABLE
  1360                                  	;
  1361                                  	; INPUT -> DL = Disk/Drive #
  1362                                  	; 
  1363 00000AD6 8815[59180000]          	mov	byte [drv], dl  ; 0,1,80h,81h,82h,83h 
  1364                                  	;
  1365 00000ADC F6C280                  	test	dl, 80h
  1366 00000ADF 7403                    	jz	short dskprm0
  1367 00000AE1 80EA7E                  	sub	dl, 7Eh ; hd0 = 2
  1368                                  dskprm0:
  1369 00000AE4 0FB6DA                  	movzx	ebx, dl
  1370 00000AE7 81C3[5A180000]          	add	ebx, drv_status
  1371                                  
  1372 00000AED 803B80                  	cmp	byte [ebx], 80h  ; existing ?
  1373 00000AF0 72D5                    	jb	short rfdp_err
  1374                                  	;
  1375 00000AF2 E8B2FFFFFF              	call	clear_screen	 ; clear video page 0	
  1376                                  	;
  1377 00000AF7 8A1D[59180000]                  mov	bl, [drv]
  1378 00000AFD F6C380                  	test	bl, 80h
  1379 00000B00 0F85F7000000                    jnz     print_hdpt
  1380                                  
  1381 00000B06 0FB6F3                  	movzx	esi, bl
  1382 00000B09 80C330                  	add	bl, 30h	; '0'
  1383 00000B0C 881D[9F0E0000]          	mov	byte [flpdnum], bl
  1384 00000B12 81C6[1E180000]          	add	esi, fd0_type
  1385 00000B18 8A06                    	mov	al, [esi]
  1386 00000B1A A2[D60E0000]                    mov     byte [flpdtype], al 
  1387                                                                     ; floppy disk drive type
  1388                                  				   ; (1=360K, 2=1.2M, 3=720K, 4=1.44M)
  1389                                  print_flpdpt:
  1390                                  	; Writing the Diskette Parameter Table on screen
  1391 00000B1F C0E304                  	shl	bl, 4 ; * 16
  1392 00000B22 0FB6F3                  	movzx	esi, bl
  1393 00000B25 81C6[9C180000]          	add	esi, fd0_dpt
  1394 00000B2B AC                      	lodsb 	; bits 0-3: SRT step rate time
  1395                                  		; bits 4-7: head unload time
  1396 00000B2C BF[200F0000]            	mov	edi, rSrtHdUnld
  1397 00000B31 E8AC000000              	call	write_hex
  1398 00000B36 AC                      	lodsb 	; bit 0: 1=use DMA
  1399                                  		; bits 2-7: head load time
  1400 00000B37 BF[680F0000]            	mov	edi, rDmaHdLd
  1401 00000B3C E8A1000000              	call	write_hex
  1402 00000B41 AC                      	lodsb 	; 55-ms increments 
  1403                                  		; before turning disk motor off
  1404 00000B42 BF[AF0F0000]            	mov	edi, bMotorOff
  1405 00000B47 E896000000              	call	write_hex
  1406 00000B4C AC                      	lodsb 	; sector size
  1407                                  		; (0=128, 1=256, 2=512, 3=1024)
  1408 00000B4D BF[F40F0000]            	mov	edi, bSectSize
  1409 00000B52 E88B000000              	call	write_hex
  1410 00000B57 AC                      	lodsb 	; EOT (last sector on a track)
  1411 00000B58 BF[20100000]            	mov	edi, bLastTrack
  1412 00000B5D E880000000              	call	write_hex
  1413 00000B62 AC                      	lodsb 	; gap length 
  1414                                  		; for read/write operations
  1415 00000B63 BF[3C100000]            	mov	edi, bGapLen
  1416 00000B68 E875000000              	call	write_hex
  1417 00000B6D AC                      	lodsb 	; DTL (Data Transfer Length)
  1418                                  		; max transfer when length not set	
  1419 00000B6E BF[58100000]            	mov	edi, bDTL
  1420 00000B73 E86A000000              	call	write_hex
  1421 00000B78 AC                      	lodsb 	; gap length for format operation
  1422 00000B79 BF[74100000]            	mov	edi, bGapFmt
  1423 00000B7E E85F000000              	call	write_hex
  1424 00000B83 AC                      	lodsb 	; fill character for format 
  1425                                  		; (normally F6H)
  1426 00000B84 BF[90100000]            	mov	edi, bFillChar
  1427 00000B89 E854000000              	call	write_hex
  1428 00000B8E AC                      	lodsb 	; head-settle time
  1429                                  		; (in milliseconds)
  1430 00000B8F BF[BB100000]            	mov	edi, bHdSettle
  1431 00000B94 E849000000              	call	write_hex
  1432 00000B99 AC                      	lodsb 	; motor-startup time
  1433                                  		; (in 1/8th-second intervals)
  1434 00000B9A BF[E4100000]            	mov	edi, bMotorOn
  1435 00000B9F E83E000000              	call	write_hex
  1436                                  	;
  1437                                  	; (extension, not in original bios function)
  1438 00000BA4 AC                      	lodsb	; Max. track number
  1439 00000BA5 BF[1E110000]            	mov	edi, bMaxTrack
  1440 00000BAA E833000000              	call	write_hex
  1441 00000BAF AC                      	lodsb	; Data transfer rate
  1442 00000BB0 BF[3A110000]            	mov	edi, bDataRate
  1443 00000BB5 E828000000              	call	write_hex
  1444                                  	;
  1445 00000BBA A0[59180000]            	mov	al, [drv]
  1446 00000BBF 0430                    	add	al, 30h ; '0'
  1447 00000BC1 A2[9F0E0000]                    mov     byte [flpdnum], al
  1448 00000BC6 BE[970E0000]                    mov     esi, FLPDPT
  1449 00000BCB E81F020000              	call	print_msg
  1450 00000BD0 C3                      	retn
  1451                                  
  1452                                  write_dhex:
  1453 00000BD1 88E3                    	mov	bl, ah
  1454 00000BD3 C0EB04                          shr     bl, 4
  1455 00000BD6 E813000000                      call    dhgd
  1456 00000BDB 88E3                    	mov	bl, ah
  1457 00000BDD E80C000000              	call	dhgd
  1458                                  
  1459                                  write_hex:
  1460 00000BE2 88C3                    	mov	bl, al
  1461 00000BE4 C0EB04                          shr     bl, 4
  1462 00000BE7 E802000000              	call	dhgd
  1463 00000BEC 88C3                    	mov	bl, al
  1464                                  	;call	dhgd
  1465                                  	;retn
  1466                                  dhgd:
  1467 00000BEE 50                      	push	eax
  1468 00000BEF 83E30F                  	and	ebx, 0Fh
  1469 00000BF2 81C3[76150000]                  add     ebx, hex_digits
  1470 00000BF8 8A03                            mov     al, [ebx]
  1471 00000BFA AA                      	stosb
  1472 00000BFB 58                      	pop	eax
  1473 00000BFC C3                      	retn
  1474                                  
  1475                                  print_hdpt:
  1476                                  	;mov	bl, [drv]
  1477 00000BFD 80E303                  	and	bl, 3
  1478 00000C00 88D8                    	mov	al, bl
  1479 00000C02 0402                    	add	al, 2
  1480 00000C04 A2[59180000]            	mov	[drv], al
  1481                                  	;
  1482 00000C09 C0E305                  	shl	bl, 5 ; * 32
  1483 00000C0C 0FB6F3                  	movzx	esi, bl
  1484 00000C0F 81C6[BC180000]          	add	esi, hd0_dpt  
  1485                                  	;
  1486 00000C15 807E03A0                	cmp	byte [esi+3], 0A0h ; Translated table
  1487 00000C19 0F84EB000000                    je      print_thdpt       ; indicator
  1488                                  	;
  1489                                  	; Writing Fixed Disk Parameter Table on screen
  1490 00000C1F 66AD                    	lodsw 	; Number of Cylinders
  1491 00000C21 BF[AD110000]            	mov	edi, cylnum
  1492 00000C26 E8A6FFFFFF              	call	write_dhex
  1493 00000C2B AC                      	lodsb	; Number of Heads
  1494 00000C2C BF[CA110000]            	mov	edi, headnum
  1495 00000C31 E8ACFFFFFF              	call	write_hex
  1496 00000C36 AC                      	lodsb	; Reserved
  1497 00000C37 BF[E5110000]            	mov	edi, rsvd3
  1498 00000C3C E8A1FFFFFF              	call	write_hex
  1499 00000C41 AC                      	lodsb	; Reserved
  1500 00000C42 BF[00120000]            	mov	edi, rsvd4
  1501 00000C47 E896FFFFFF              	call	write_hex
  1502 00000C4C 66AD                    	lodsw	; Precompensation (Obsolete)
  1503 00000C4E BF[1B120000]            	mov	edi, pcompnum
  1504 00000C53 E879FFFFFF              	call	write_dhex
  1505 00000C58 AC                      	lodsb	; Reserved
  1506 00000C59 BF[38120000]            	mov	edi, rsvd7
  1507 00000C5E E87FFFFFFF              	call	write_hex
  1508 00000C63 AC                      	lodsb	; Drive Control Byte
  1509 00000C64 BF[53120000]            	mov	edi, dcbnum
  1510 00000C69 E874FFFFFF              	call	write_hex
  1511 00000C6E 66AD                    	lodsw	; Reserved
  1512 00000C70 BF[6E120000]            	mov	edi, rsvd9
  1513 00000C75 E857FFFFFF              	call	write_dhex
  1514 00000C7A AC                      	lodsb	; Reserved
  1515 00000C7B BF[8B120000]            	mov	edi, rsvd11
  1516 00000C80 E85DFFFFFF              	call	write_hex
  1517 00000C85 66AD                    	lodsw	; Landing Zone (Obsolete)
  1518 00000C87 BF[A6120000]            	mov	edi, lzonenum
  1519 00000C8C E840FFFFFF              	call	write_dhex
  1520 00000C91 AC                      	lodsb	; Sectors per Track
  1521 00000C92 BF[C3120000]            	mov	edi, psptnum
  1522 00000C97 E846FFFFFF              	call	write_hex
  1523 00000C9C AC                      	lodsb	; Reserved
  1524 00000C9D BF[DE120000]            	mov	edi, rsvd15
  1525 00000CA2 E83BFFFFFF              	call	write_hex
  1526                                  	;
  1527                                  	; (extension, not in original bios function)
  1528 00000CA7 66AD                    	lodsw	; I/O Port Base Address
  1529 00000CA9 BF[FB120000]            	mov	edi, bPortAddr
  1530 00000CAE E81EFFFFFF              	call	write_dhex
  1531                                  	; 06/01/2015
  1532 00000CB3 66AD                    	lodsw	; Control Port Address
  1533 00000CB5 BF[18130000]            	mov	edi, cPortAddr
  1534 00000CBA E812FFFFFF              	call	write_dhex
  1535 00000CBF AC                      	lodsb	; Head Register Upper Nibble 
  1536 00000CC0 BF[35130000]            	mov	edi, hregupnib
  1537 00000CC5 E818FFFFFF              	call	write_hex
  1538                                  	;
  1539 00000CCA A0[59180000]            	mov     al, [drv]
  1540 00000CCF 88C3                    	mov	bl, al
  1541 00000CD1 0430                    	add	al, '0'
  1542 00000CD3 A2[75110000]                    mov     [dsknum], al
  1543                                  	;	      
  1544 00000CD8 C0E302                  	shl	bl, 2
  1545 00000CDB 0FB6F3                  	movzx	esi, bl
  1546 00000CDE 81C6[84180000]                  add     esi, drv_size
  1547 00000CE4 668B4602                	mov	ax, [esi+2]
  1548 00000CE8 BF[52130000]                    mov     edi, disksize
  1549 00000CED E8DFFEFFFF              	call	write_dhex
  1550 00000CF2 668B06                  	mov	ax, [esi]
  1551 00000CF5 BF[56130000]            	mov	edi, disksize+4
  1552 00000CFA E8D2FEFFFF              	call	write_dhex	
  1553                                  	;
  1554 00000CFF BE[6D110000]                    mov     esi, HDPT
  1555 00000D04 E8E6000000              	call	print_msg
  1556 00000D09 C3                      	retn
  1557                                  
  1558                                  print_thdpt:
  1559                                  	; Writing the Translated FDPT on screen
  1560                                  	; (PHOENIX - EDD specification v1.1)
  1561 00000D0A 66AD                    	lodsw 	; Logical Numbers of Cylinders, Limit 1024
  1562 00000D0C BF[AB130000]            	mov	edi, lcylnum
  1563 00000D11 E8BBFEFFFF              	call	write_dhex
  1564 00000D16 AC                      	lodsb	; Logical Numbers of Heads, Limit 256
  1565 00000D17 BF[C8130000]            	mov	edi, lheadnum
  1566 00000D1C E8C1FEFFFF              	call	write_hex
  1567 00000D21 AC                      	lodsb	; A0h signature, indicates translated table
  1568 00000D22 BF[E3130000]            	mov	edi, tsignum
  1569 00000D27 E8B6FEFFFF              	call	write_hex
  1570 00000D2C AC                      	lodsb	; Physical Sectors per Track
  1571 00000D2D BF[FE130000]            	mov	edi, tpsptnum
  1572 00000D32 E8ABFEFFFF              	call	write_hex
  1573 00000D37 66AD                    	lodsw	; Precompensation (Obsolete)
  1574 00000D39 BF[19140000]            	mov	edi, tpcompnum
  1575 00000D3E E88EFEFFFF              	call	write_dhex
  1576 00000D43 AC                      	lodsb	; Reserved
  1577 00000D44 BF[42140000]            	mov	edi, trsvd7
  1578 00000D49 E894FEFFFF              	call	write_hex
  1579 00000D4E AC                      	lodsb	; Drive Control Byte
  1580 00000D4F BF[5D140000]            	mov	edi, tdcbnum
  1581 00000D54 E889FEFFFF              	call	write_hex
  1582 00000D59 66AD                    	lodsw	; Physical Cylinders, limit 65536
  1583 00000D5B BF[78140000]            	mov	edi, tpcylnum
  1584 00000D60 E86CFEFFFF              	call	write_dhex
  1585 00000D65 AC                      	lodsb	; Physical Heads, limit 16
  1586 00000D66 BF[95140000]            	mov	edi, tpheadnum
  1587 00000D6B E872FEFFFF              	call	write_hex
  1588 00000D70 66AD                    	lodsw	; Landing Zone (Obsolete)
  1589 00000D72 BF[B0140000]            	mov	edi, tlzonenum
  1590 00000D77 E855FEFFFF              	call	write_dhex
  1591 00000D7C AC                      	lodsb	; Logical Sectors per Track, Limit 63
  1592 00000D7D BF[D9140000]            	mov	edi, lsptnum
  1593 00000D82 E85BFEFFFF              	call	write_hex
  1594 00000D87 AC                      	lodsb	; Checksum for translated FDPT 
  1595 00000D88 BF[F4140000]            	mov	edi, checksum
  1596 00000D8D E850FEFFFF              	call	write_hex
  1597                                  	;
  1598                                  	; (extension, not in original bios function)
  1599 00000D92 66AD                    	lodsw	; I/O Port Base Address
  1600 00000D94 BF[11150000]            	mov	edi, tbPortAddr
  1601 00000D99 E833FEFFFF              	call	write_dhex
  1602                                  	; 06/01/2015
  1603 00000D9E 66AD                    	lodsw	; Control Port Address
  1604 00000DA0 BF[2E150000]            	mov	edi, tcPortAddr
  1605 00000DA5 E827FEFFFF              	call	write_dhex
  1606 00000DAA AC                      	lodsb	; Head Register Upper Nibble 
  1607 00000DAB BF[4B150000]            	mov	edi, thregupnib
  1608 00000DB0 E82DFEFFFF              	call	write_hex
  1609                                  	;
  1610 00000DB5 A0[59180000]            	mov     al, [drv]
  1611 00000DBA 88C3                    	mov	bl, al
  1612 00000DBC 0430                    	add	al, '0'
  1613 00000DBE A2[68130000]                    mov     [tdsknum], al
  1614                                  	;  
  1615 00000DC3 C0E302                  	shl	bl, 2
  1616 00000DC6 0FB6F3                  	movzx	esi, bl
  1617 00000DC9 81C6[84180000]                  add     esi, drv_size
  1618 00000DCF 668B4602                	mov	ax, [esi+2]
  1619 00000DD3 BF[68150000]            	mov	edi, tdisksize
  1620 00000DD8 E8F4FDFFFF              	call	write_dhex
  1621 00000DDD 668B06                  	mov	ax, [esi]
  1622 00000DE0 BF[6C150000]            	mov	edi, tdisksize+4
  1623 00000DE5 E8E7FDFFFF              	call	write_dhex	
  1624                                  	;
  1625 00000DEA BE[60130000]            	mov     esi, THDPT
  1626                                  	;call	print_msg
  1627                                  	;retn
  1628                                  
  1629                                  print_msg:
  1630 00000DEF 66BB0700                	mov	bx, 7
  1631 00000DF3 B40E                            mov     ah, 0Eh
  1632                                  pmsg_loop:
  1633 00000DF5 AC                      	lodsb
  1634 00000DF6 20C0                    	and	al, al
  1635 00000DF8 7404                    	jz	short pmsg_ok
  1636 00000DFA CD31                    	int	31h	; TRDOS 386 video interrupt
  1637 00000DFC EBF7                    	jmp	short pmsg_loop	
  1638                                  pmsg_ok:
  1639 00000DFE B410                    	mov	ah, 10h ; Getchar
  1640 00000E00 CD32                    	int	32h	; TRDOS 386 keyboard interrupt
  1641 00000E02 C3                      	retn
  1642                                  
  1643                                  	; 28/08/2020
  1644                                  dskvprm:
  1645                                  	; DISPLAY (LBA) DISK SIZE AND VIRTUAL CHS PARAMETERS
  1646                                  	;
  1647                                  	; INPUT -> DL = Disk/Drive #
  1648                                  	; 
  1649 00000E03 8815[59180000]          	mov	byte [drv], dl  ; 0,1,80h,81h,82h,83h 
  1650                                  	;
  1651 00000E09 F6C280                  	test	dl, 80h
  1652 00000E0C 7403                    	jz	short dskvprm0
  1653 00000E0E 80EA7E                  	sub	dl, 7Eh ; hd0 = 2
  1654                                  dskvprm0:
  1655 00000E11 0FB6F2                  	movzx	esi, dl
  1656                                  
  1657 00000E14 80BE[5A180000]80        	cmp	byte [esi+drv_status], 80h  ; existing ?
  1658 00000E1B 0F82A6FCFFFF            	jb	rfdp_err
  1659                                  	;
  1660 00000E21 E883FCFFFF              	call	clear_screen	 ; clear video page 0	
  1661                                  	;
  1662                                  
  1663 00000E26 66C1E602                	shl	si, 2 ; * 4
  1664 00000E2A 668B86[86180000]        	mov	ax, [esi+drv_size+2]
  1665 00000E31 BF[2C170000]            	mov	edi, lbadisksize
  1666 00000E36 E896FDFFFF              	call	write_dhex
  1667 00000E3B 668B86[84180000]        	mov	ax, [esi+drv_size]
  1668 00000E42 BF[30170000]            	mov	edi, lbadisksize+4
  1669 00000E47 E885FDFFFF              	call	write_dhex
  1670 00000E4C 66D1EE                  	shr	si, 1
  1671 00000E4F 668B86[60180000]        	mov	ax, [esi+drv_cylinders]
  1672 00000E56 BF[4D170000]            	mov	edi, vcylinders
  1673 00000E5B E871FDFFFF              	call	write_dhex	
  1674 00000E60 8A86[6C180000]          	mov	al, [esi+drv_heads]
  1675 00000E66 BF[60170000]            	mov	edi, vheads
  1676 00000E6B E872FDFFFF              	call	write_hex
  1677 00000E70 8A86[78180000]          	mov	al, [esi+drv_spt]
  1678 00000E76 BF[71170000]            	mov	edi, vspt
  1679 00000E7B E862FDFFFF              	call	write_hex
  1680                                  
  1681 00000E80 6689F0                  	mov	ax, si
  1682 00000E83 D0E8                    	shr	al, 1
  1683 00000E85 0430                    	add	al, '0'
  1684 00000E87 A2[F6160000]            	mov	[vprm_drv], al
  1685                                  
  1686 00000E8C BE[EE160000]                    mov     esi, VPRMS
  1687 00000E91 E859FFFFFF              	call	print_msg
  1688 00000E96 C3                      	retn
  1689                                  
  1690                                  ;
  1691                                  FLPDPT:
  1692 00000E97 07                      	db 07h
  1693 00000E98 0D0A                    	db 0Dh, 0Ah	
  1694 00000E9A 4469736B20              	db 'Disk '
  1695                                  flpdnum:
  1696 00000E9F 58202D20                	db 'X - '
  1697 00000EA3 4449534B4554544520-     	db 'DISKETTE PARAMETER TABLE'
  1697 00000EAC 504152414D45544552-
  1697 00000EB5 205441424C45       
  1698 00000EBB 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  1699 00000EBF 547970652020202020-     	db 'Type                 : '
  1699 00000EC8 202020202020202020-
  1699 00000ED1 2020203A20         
  1700                                  flpdtype:
  1701 00000ED6 58202020                	db 'X   '
  1702 00000EDA 5B2031203D20333630-     	db '[ 1 = 360K, 2 = 1.2M, 3 = 720K, 4 = 1.44M ]'
  1702 00000EE3 4B2C2032203D20312E-
  1702 00000EEC 324D2C2033203D2037-
  1702 00000EF5 32304B2C2034203D20-
  1702 00000EFE 312E34344D205D     
  1703 00000F05 0D0A0D0A                	db 0Dh, 0Ah, 0DH, 0Ah 
  1704 00000F09 535254202D20486561-     	db 'SRT - Head Unld Time : '
  1704 00000F12 6420556E6C64205469-
  1704 00000F1B 6D65203A20         
  1705                                  rSrtHdUnld:
  1706 00000F20 585868202862697473-     	db 'XXh (bits 0-3: SRT, bits 4-7: head unload time)'
  1706 00000F29 20302D333A20535254-
  1706 00000F32 2C206269747320342D-
  1706 00000F3B 373A20686561642075-
  1706 00000F44 6E6C6F61642074696D-
  1706 00000F4D 6529               
  1707 00000F4F 0D0A                    	db 0Dh, 0Ah
  1708 00000F51 444D41202D20486561-     	db 'DMA - Head Load Time : '
  1708 00000F5A 64204C6F6164205469-
  1708 00000F63 6D65203A20         
  1709                                  rDmaHdLd:
  1710 00000F68 585868202862697420-     	db 'XXh (bit 0: 1 = DMA, bits 2-7: head load time)'
  1710 00000F71 303A2031203D20444D-
  1710 00000F7A 412C20626974732032-
  1710 00000F83 2D373A206865616420-
  1710 00000F8C 6C6F61642074696D65-
  1710 00000F95 29                 
  1711 00000F96 0D0A                    	db 0Dh, 0Ah
  1712 00000F98 4D6F746F72204F6666-     	db 'Motor Off Count      : '
  1712 00000FA1 20436F756E74202020-
  1712 00000FAA 2020203A20         
  1713                                  bMotorOff:
  1714 00000FAF 585868202877697468-     	db 'XXh (with 55ms icrements before turning off)'
  1714 00000FB8 2035356D7320696372-
  1714 00000FC1 656D656E7473206265-
  1714 00000FCA 666F7265207475726E-
  1714 00000FD3 696E67206F666629   
  1715 00000FDB 0D0A                    	db 0Dh, 0Ah
  1716 00000FDD 536563746F72205369-     	db 'Sector Size          : '
  1716 00000FE6 7A6520202020202020-
  1716 00000FEF 2020203A20         
  1717                                  bSectSize:
  1718 00000FF4 585868202832203D20-     	db 'XXh (2 = 512 bytes)'
  1718 00000FFD 353132206279746573-
  1718 00001006 29                 
  1719 00001007 0D0A                    	db 0Dh, 0Ah	
  1720 00001009 4C6173742053656374-     	db 'Last Sect on a Track : '
  1720 00001012 206F6E206120547261-
  1720 0000101B 636B203A20         
  1721                                  bLastTrack:
  1722 00001020 585868                  	db 'XXh'
  1723 00001023 0D0A                    	db 0Dh, 0Ah
  1724 00001025 476170204C656E6774-     	db 'Gap Length  (R/W)    : '
  1724 0000102E 68202028522F572920-
  1724 00001037 2020203A20         
  1725                                  bGapLen:
  1726 0000103C 585868                  	db 'XXh'
  1727 0000103F 0D0A                    	db 0Dh, 0Ah
  1728 00001041 44617461205472616E-     	db 'Data Transfer Length : '
  1728 0000104A 73666572204C656E67-
  1728 00001053 7468203A20         
  1729                                  bDTL:
  1730 00001058 585868                  	db 'XXh'
  1731 0000105B 0D0A                    	db 0Dh, 0Ah		
  1732 0000105D 476170204C656E6774-     	db 'Gap Length (Format)  : '
  1732 00001066 682028466F726D6174-
  1732 0000106F 2920203A20         
  1733                                  bGapFmt:
  1734 00001074 585868                  	db 'XXh'
  1735 00001077 0D0A                    	db 0Dh, 0Ah
  1736 00001079 46696C6C2043686172-     	db 'Fill Char for format : '
  1736 00001082 20666F7220666F726D-
  1736 0000108B 6174203A20         
  1737                                  bFillChar:
  1738 00001090 58586820286E6F726D-     	db 'XXh (normally F6h)'
  1738 00001099 616C6C792046366829 
  1739 000010A2 0D0A                    	db 0Dh, 0Ah
  1740 000010A4 486561642053657474-     	db 'Head Settle Time     : '
  1740 000010AD 6C652054696D652020-
  1740 000010B6 2020203A20         
  1741                                  bHdSettle:
  1742 000010BB 585868206D696C6C69-     	db 'XXh milliseconds'
  1742 000010C4 7365636F6E6473     
  1743 000010CB 0D0A                    	db 0Dh, 0Ah
  1744 000010CD 4D6F746F7220537461-     	db 'Motor Startup Time   : '
  1744 000010D6 727475702054696D65-
  1744 000010DF 2020203A20         
  1745                                  bMotorOn:
  1746 000010E4 5858682028696E2031-     	db 'XXh (in 1/8th second intervals)'
  1746 000010ED 2F387468207365636F-
  1746 000010F6 6E6420696E74657276-
  1746 000010FF 616C7329           
  1747 00001103 0D0A                    	db 0Dh, 0Ah
  1748                                  	; 19/12/2014
  1749 00001105 0D0A                    	db 0Dh, 0Ah
  1750 00001107 4D6178696D756D2054-     	db 'Maximum Track Number : '
  1750 00001110 7261636B204E756D62-
  1750 00001119 6572203A20         
  1751                                  bMaxTrack:
  1752 0000111E 585868                  	db 'XXh'
  1753 00001121 0D0A                    	db 0Dh, 0Ah
  1754 00001123 44617461205472616E-     	db 'Data Transfer Rate   : '
  1754 0000112C 736665722052617465-
  1754 00001135 2020203A20         
  1755                                  bDataRate:
  1756 0000113A 585868202830306820-     	db 'XXh (00h = 500KBS, 40h = 300KBS, 80H = 250KBS)'
  1756 00001143 3D203530304B42532C-
  1756 0000114C 20343068203D203330-
  1756 00001155 304B42532C20383048-
  1756 0000115E 203D203235304B4253-
  1756 00001167 29                 
  1757 00001168 0D0A                    	db 0Dh, 0Ah
  1758 0000116A 0D0A00                  	db 0Dh, 0Ah, 0
  1759                                  
  1760                                  HDPT:
  1761 0000116D 07                      	db 07h
  1762 0000116E 0D0A                    	db 0Dh, 0Ah
  1763 00001170 4469736B20              	db 'Disk '
  1764                                  dsknum:
  1765 00001175 58202D20                	db 'X - '	
  1766 00001179 464958454420444953-     	db 'FIXED DISK PARAMETER TABLE'
  1766 00001182 4B20504152414D4554-
  1766 0000118B 4552205441424C45   
  1767 00001193 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah 
  1768 00001197 4E756D626572206F66-     	db 'Number of Cylinders : '
  1768 000011A0 2043796C696E646572-
  1768 000011A9 73203A20           
  1769                                  cylnum:
  1770 000011AD 5858585868              	db 'XXXXh'
  1771 000011B2 0D0A                    	db 0Dh, 0Ah
  1772 000011B4 4E756D626572206F66-     	db 'Number of Heads     : '
  1772 000011BD 204865616473202020-
  1772 000011C6 20203A20           
  1773                                  headnum:
  1774 000011CA 585868                  	db 'XXh'
  1775 000011CD 0D0A                    	db 0Dh, 0Ah
  1776 000011CF 526573657276656420-     	db 'Reserved            : '
  1776 000011D8 202020202020202020-
  1776 000011E1 20203A20           
  1777                                  rsvd3:
  1778 000011E5 585868                  	db 'XXh'
  1779 000011E8 0D0A                    	db 0Dh, 0Ah
  1780 000011EA 526573657276656420-     	db 'Reserved            : '
  1780 000011F3 202020202020202020-
  1780 000011FC 20203A20           
  1781                                  rsvd4:
  1782 00001200 585868                  	db 'XXh'
  1783 00001203 0D0A                    	db 0Dh, 0Ah	
  1784 00001205 507265636F6D70656E-     	db 'Precompensation     : '
  1784 0000120E 736174696F6E202020-
  1784 00001217 20203A20           
  1785                                  pcompnum:
  1786 0000121B 5858585868              	db 'XXXXh'
  1787 00001220 0D0A                    	db 0Dh, 0Ah
  1788 00001222 526573657276656420-     	db 'Reserved            : '
  1788 0000122B 202020202020202020-
  1788 00001234 20203A20           
  1789                                  rsvd7:
  1790 00001238 585868                  	db 'XXh'
  1791 0000123B 0D0A                    	db 0Dh, 0Ah
  1792 0000123D 447269766520436F6E-     	db 'Drive Control Byte  : '
  1792 00001246 74726F6C2042797465-
  1792 0000124F 20203A20           
  1793                                  dcbnum:
  1794 00001253 585868                  	db 'XXh'
  1795 00001256 0D0A                    	db 0Dh, 0Ah		
  1796 00001258 526573657276656420-     	db 'Reserved            : '
  1796 00001261 202020202020202020-
  1796 0000126A 20203A20           
  1797                                  rsvd9:
  1798 0000126E 5858585868              	db 'XXXXh'
  1799 00001273 0D0A                    	db 0Dh, 0Ah
  1800 00001275 526573657276656420-     	db 'Reserved            : '
  1800 0000127E 202020202020202020-
  1800 00001287 20203A20           
  1801                                  rsvd11:
  1802 0000128B 585868                  	db 'XXh'
  1803 0000128E 0D0A                    	db 0Dh, 0Ah
  1804 00001290 4C616E64696E67205A-     	db 'Landing Zone        : '
  1804 00001299 6F6E65202020202020-
  1804 000012A2 20203A20           
  1805                                  lzonenum:
  1806 000012A6 5858585868              	db 'XXXXh'
  1807 000012AB 0D0A                    	db 0Dh, 0Ah
  1808 000012AD 536563746F72732070-     	db 'Sectors per Track   : '
  1808 000012B6 657220547261636B20-
  1808 000012BF 20203A20           
  1809                                  psptnum:
  1810 000012C3 585868                  	db 'XXh'
  1811 000012C6 0D0A                    	db 0Dh, 0Ah
  1812 000012C8 526573657276656420-     	db 'Reserved            : '
  1812 000012D1 202020202020202020-
  1812 000012DA 20203A20           
  1813                                  rsvd15:
  1814 000012DE 585868                  	db 'XXh'
  1815 000012E1 0D0A                    	db 0Dh, 0Ah
  1816 000012E3 0D0A                    	db 0Dh, 0Ah
  1817 000012E5 492F4F20506F727420-     	db 'I/O Port Base Addr  : '
  1817 000012EE 426173652041646472-
  1817 000012F7 20203A20           
  1818                                  bPortAddr:
  1819 000012FB 5858585868              	db 'XXXXh'
  1820 00001300 0D0A                    	db 0Dh, 0Ah
  1821 00001302 436F6E74726F6C2050-     	db 'Control Port Addr   : '
  1821 0000130B 6F7274204164647220-
  1821 00001314 20203A20           
  1822                                  cPortAddr:
  1823 00001318 5858585868              	db 'XXXXh'
  1824 0000131D 0D0A                    	db 0Dh, 0Ah
  1825 0000131F 486561642052656720-     	db 'Head Reg Upp Nibb   : '
  1825 00001328 557070204E69626220-
  1825 00001331 20203A20           
  1826                                  hregupnib:
  1827 00001335 585868                  	db 'XXh'
  1828 00001338 0D0A                    	db 0Dh, 0Ah
  1829 0000133A 0D0A                    	db 0Dh, 0Ah
  1830 0000133C 53697A652028696E20-     	db 'Size (in sectors)   : '
  1830 00001345 736563746F72732920-
  1830 0000134E 20203A20           
  1831                                  disksize:
  1832 00001352 585858585858585868      	db 'XXXXXXXXh'
  1833 0000135B 0D0A                    	db 0Dh, 0Ah
  1834 0000135D 0D0A00                  	db 0Dh, 0Ah, 0
  1835                                  
  1836                                  THDPT:
  1837 00001360 07                      	db 07h
  1838 00001361 0D0A                    	db 0Dh, 0Ah
  1839 00001363 4469736B20              	db 'Disk '
  1840                                  tdsknum:
  1841 00001368 58202D20                	db 'X - '	
  1842 0000136C 5452414E534C415445-     	db 'TRANSLATED FIXED DISK PARAMETER TABLE'
  1842 00001375 442046495845442044-
  1842 0000137E 49534B20504152414D-
  1842 00001387 45544552205441424C-
  1842 00001390 45                 
  1843 00001391 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah 
  1844 00001395 4C6F676963616C2043-     	db 'Logical Cylinders   : '
  1844 0000139E 796C696E6465727320-
  1844 000013A7 20203A20           
  1845                                  lcylnum:
  1846 000013AB 5858585868              	db 'XXXXh'
  1847 000013B0 0D0A                    	db 0Dh, 0Ah
  1848 000013B2 4C6F676963616C2048-     	db 'Logical Heads       : '
  1848 000013BB 656164732020202020-
  1848 000013C4 20203A20           
  1849                                  lheadnum:
  1850 000013C8 585868                  	db 'XXh'
  1851 000013CB 0D0A                    	db 0Dh, 0Ah
  1852 000013CD 5369676E6174757265-     	db 'Signature           : '
  1852 000013D6 202020202020202020-
  1852 000013DF 20203A20           
  1853                                  tsignum:
  1854 000013E3 585868                  	db 'XXh'
  1855 000013E6 0D0A                    	db 0Dh, 0Ah
  1856 000013E8 506879205365632070-     	db 'Phy Sec per Track   : '
  1856 000013F1 657220547261636B20-
  1856 000013FA 20203A20           
  1857                                  tpsptnum:
  1858 000013FE 585868                  	db 'XXh'
  1859 00001401 0D0A                    	db 0Dh, 0Ah	
  1860 00001403 507265636F6D70656E-     	db 'Precompensation     : '
  1860 0000140C 736174696F6E202020-
  1860 00001415 20203A20           
  1861                                  tpcompnum:
  1862 00001419 58585858682020284F-     	db 'XXXXh  (Obsolete)'
  1862 00001422 62736F6C65746529   
  1863 0000142A 0D0A                    	db 0Dh, 0Ah
  1864 0000142C 526573657276656420-     	db 'Reserved            : '
  1864 00001435 202020202020202020-
  1864 0000143E 20203A20           
  1865                                  trsvd7:
  1866 00001442 585868                  	db 'XXh'
  1867 00001445 0D0A                    	db 0Dh, 0Ah
  1868 00001447 447269766520436F6E-     	db 'Drive Control Byte  : '
  1868 00001450 74726F6C2042797465-
  1868 00001459 20203A20           
  1869                                  tdcbnum:
  1870 0000145D 585868                  	db 'XXh'
  1871 00001460 0D0A                    	db 0Dh, 0Ah		
  1872 00001462 506879736963616C20-     	db 'Physical Cylinders  : '
  1872 0000146B 43796C696E64657273-
  1872 00001474 20203A20           
  1873                                  tpcylnum:
  1874 00001478 5858585868              	db 'XXXXh'
  1875 0000147D 0D0A                    	db 0Dh, 0Ah
  1876 0000147F 506879736963616C20-     	db 'Physical Heads      : '
  1876 00001488 486561647320202020-
  1876 00001491 20203A20           
  1877                                  tpheadnum:
  1878 00001495 585868                  	db 'XXh'
  1879 00001498 0D0A                    	db 0Dh, 0Ah
  1880 0000149A 4C616E64696E67205A-     	db 'Landing Zone        : '
  1880 000014A3 6F6E65202020202020-
  1880 000014AC 20203A20           
  1881                                  tlzonenum:
  1882 000014B0 58585858682020284F-     	db 'XXXXh  (Obsolete)'
  1882 000014B9 62736F6C65746529   
  1883 000014C1 0D0A                    	db 0Dh, 0Ah
  1884 000014C3 4C6F67696320536563-     	db 'Logic Sec per Trk   : '
  1884 000014CC 207065722054726B20-
  1884 000014D5 20203A20           
  1885                                  lsptnum:
  1886 000014D9 585868                  	db 'XXh'
  1887 000014DC 0D0A                    	db 0Dh, 0Ah
  1888 000014DE 436865636B73756D20-     	db 'Checksum            : '
  1888 000014E7 202020202020202020-
  1888 000014F0 20203A20           
  1889                                  checksum:
  1890 000014F4 585868                  	db 'XXh'
  1891 000014F7 0D0A                    	db 0Dh, 0Ah
  1892 000014F9 0D0A                    	db 0Dh, 0Ah
  1893 000014FB 492F4F20506F727420-     	db 'I/O Port Base Addr  : '
  1893 00001504 426173652041646472-
  1893 0000150D 20203A20           
  1894                                  tbPortAddr:
  1895 00001511 5858585868              	db 'XXXXh'
  1896 00001516 0D0A                    	db 0Dh, 0Ah
  1897 00001518 436F6E74726F6C2050-     	db 'Control Port Addr   : '
  1897 00001521 6F7274204164647220-
  1897 0000152A 20203A20           
  1898                                  tcPortAddr:
  1899 0000152E 5858585868              	db 'XXXXh'
  1900 00001533 0D0A                    	db 0Dh, 0Ah
  1901 00001535 486561642052656720-     	db 'Head Reg Upp Nibb   : '
  1901 0000153E 557070204E69626220-
  1901 00001547 20203A20           
  1902                                  thregupnib:
  1903 0000154B 585868                  	db 'XXh'
  1904 0000154E 0D0A                    	db 0Dh, 0Ah
  1905 00001550 0D0A                    	db 0Dh, 0Ah
  1906 00001552 53697A652028696E20-     	db 'Size (in sectors)   : '
  1906 0000155B 736563746F72732920-
  1906 00001564 20203A20           
  1907                                  tdisksize:
  1908 00001568 585858585858585868      	db 'XXXXXXXXh'
  1909 00001571 0D0A                    	db 0Dh, 0Ah
  1910 00001573 0D0A00                  	db 0Dh, 0Ah, 0
  1911                                  
  1912                                  hex_digits:
  1913                                  hexchrs:
  1914 00001576 303132333435363738-     	db '0123456789ABCDEF'
  1914 0000157F 39414243444546     
  1915                                  
  1916                                  ds_drv:
  1917 00001586 FF                      	db 0FFh ; Current drive (on display)
  1918 00001587 00                       	db 0    ; Current half (0 or >0)
  1919                                  
  1920                                  drv_names:
  1921 00001588 666430206664312068-     	db 'fd0 fd1 hd0 hd1 hd2 hd3 '
  1921 00001591 643020686431206864-
  1921 0000159A 322068643320       
  1922                                  
  1923                                  dpheader:
  1924 000015A0 204472697665203A20      	db ' Drive : '
  1925                                  drv_name:
  1926 000015A9 3030302020              	db '000  '
  1927 000015AE 536563746F72203A20      	db  'Sector : '
  1928                                  sector_num:
  1929 000015B7 464646464646464668      	db  'FFFFFFFFh'
  1930 000015C0 00                              db 0
  1931                                  
  1932                                  sdline:
  1933 000015C1 204279746520            	db ' Byte '
  1934                                  sdline_1:
  1935 000015C7 30303068                	db '000h'
  1936 000015CB 202D2020                	db ' -  '
  1937                                  sdline_2:
  1938 000015CF 303020303020303020-     	db '00 00 00 00 00 00 00 00 '
  1938 000015D8 303020303020303020-
  1938 000015E1 303020303020       
  1939 000015E7 303020303020303020-     	db '00 00 00 00 00 00 00 00 '
  1939 000015F0 303020303020303020-
  1939 000015F9 303020303020       
  1940 000015FF 20                      	db ' '
  1941                                  sdline_3:
  1942 00001600 2E2E2E2E2E2E2E2E2E-     	db '................'
  1942 00001609 2E2E2E2E2E2E2E     
  1943 00001610 20                      	db 20h
  1944                                  
  1945                                  dpfooter1:
  1946 00001611 204631203D20436861-     	db ' F1 = Change Drive  '
  1946 0000161A 6E6765204472697665-
  1946 00001623 2020               
  1947 00001625 486F6D65203D204669-     	db 'Home = First Sector '
  1947 0000162E 72737420536563746F-
  1947 00001637 7220               
  1948 00001639 50675570203D205072-     	db 'PgUp = Previous Sector '
  1948 00001642 6576696F7573205365-
  1948 0000164B 63746F7220         
  1949 00001650 455343203D20455849-     	db 'ESC = EXIT'
  1949 00001659 54                 
  1950 0000165A 00                      	db 0
  1951                                  dpfooter2:
  1952 0000165B 204632203D20436861-     	db ' F2 = Change Sector '
  1952 00001664 6E676520536563746F-
  1952 0000166D 7220               
  1953 0000166F 456E64203D204C6173-     	db 'End = Last Sector   '
  1953 00001678 7420536563746F7220-
  1953 00001681 2020               
  1954 00001683 5067446F776E203D20-     	db 'PgDown = Next Sector   ' 
  1954 0000168C 4E6578742053656374-
  1954 00001695 6F72202020         
  1955 0000169A 454E544552203D2050-     	db 'ENTER = Prv/Nxt'
  1955 000016A3 72762F4E7874       
  1956 000016A9 00                      	db 0
  1957                                  
  1958                                  F1_ib:
  1959 000016AA 10                      	db 16	; box width (columns)
  1960 000016AB 03                      	db 3	; box height (rows)
  1961 000016AC 01                      	db 1	; label offset (vertical)
  1962 000016AD 01                      	db 1	; label offset (horizontal)
  1963 000016AE 01                      	db 1	; text (input) size
  1964 000016AF 4E                      	db 4Eh	; box color
  1965 000016B0 44726976653A20          	db 'Drive: '  ; Label
  1966 000016B7 00                      	db 0
  1967                                  
  1968                                  F2_ib:
  1969 000016B8 14                      	db 20	; box width (columns)
  1970 000016B9 03                      	db 3	; box height (rows)
  1971 000016BA 01                      	db 1	; label offset (vertical)
  1972 000016BB 01                      	db 1	; label offset (horizontal)
  1973 000016BC 08                      	db 8	; text (input) size
  1974 000016BD 4E                      	db 4Eh	; box color
  1975 000016BE 536563746F72203A20      	db 'Sector : '  ; Label
  1976 000016C7 00                      	db 0
  1977                                  
  1978                                  dskr_err:
  1979 000016C8 21                      	db 33	; box width (columns)
  1980                                  	;db 17	
  1981 000016C9 03                      	db 3	; box height (rows)
  1982 000016CA 01                      	db 1	; label offset (vertical)
  1983 000016CB 01                      	db 1	; label offset (horizontal)
  1984 000016CC 00                      	db 0	; text (input) size
  1985 000016CD 4E                      	db 4Eh	; box color
  1986 000016CE 4472697665206E6F74-     	db 'Drive not ready or read error !'  ; Label
  1986 000016D7 207265616479206F72-
  1986 000016E0 207265616420657272-
  1986 000016E9 6F722021           
  1987                                  	;db ' Error : '
  1988                                  ;err_code_str:
  1989                                  ;	db '00h ! '	
  1990 000016ED 00                      	db 0
  1991                                  
  1992                                  	; 28/08/2020
  1993                                  VPRMS:
  1994 000016EE 07                      	db 07h
  1995 000016EF 0D0A                    	db 0Dh, 0Ah
  1996 000016F1 4469736B20              	db 'Disk '
  1997                                  vprm_drv:
  1998 000016F6 58202D20                	db 'X - '	
  1999 000016FA 4449534B2053495A45-     	db 'DISK SIZE AND (VIRTUAL) CHS VALUES'
  1999 00001703 20414E442028564952-
  1999 0000170C 5455414C2920434853-
  1999 00001715 2056414C554553     
  2000 0000171C 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  2001 00001720 4469736B2053697A65-     	db 'Disk Size : '
  2001 00001729 203A20             
  2002                                  lbadisksize:
  2003 0000172C 585858585858585868-     	db 'XXXXXXXXh sectors'		
  2003 00001735 20736563746F7273   
  2004 0000173D 0D0A0D0A                 	db 0Dh, 0Ah, 0Dh, 0Ah
  2005                                  
  2006 00001741 43796C696E64657273-     	db 'Cylinders : '
  2006 0000174A 203A20             
  2007                                  vcylinders:
  2008 0000174D 5858585868              	db 'XXXXh'
  2009 00001752 0D0A                    	db 0Dh, 0Ah
  2010 00001754 486561647320202020-     	db 'Heads     : '
  2010 0000175D 203A20             
  2011                                  vheads:
  2012 00001760 585868                  	db 'XXh'
  2013 00001763 0D0A                    	db 0Dh, 0Ah
  2014 00001765 536563746F72732020-     	db 'Sectors   : '
  2014 0000176E 203A20             
  2015                                  vspt:
  2016 00001771 585868                  	db 'XXh'
  2017 00001774 0D0A                    	db 0Dh, 0Ah
  2018 00001776 0D0A00                  	db 0Dh, 0Ah, 0	
  2019                                  
  2020                                  ; Additional functions, variables/pointers for 
  2021                                  ; Real Mode adaption (out of unix386.s) variables/pointers
  2022                                  
  2023                                  set_cpos:
  2024 00001779 668B15[4C180000]        	mov	dx, [cursor_posn] ; dh = row, dl = column
  2025                                  set_cposx:
  2026                                  	; DX = cursor position
  2027 00001780 B402                    	mov	ah, 2		; Set cursor position
  2028 00001782 30FF                    	xor	bh, bh		; for video page 0
  2029 00001784 CD31                    	int	31h		; TRDOS 386 video interrupt
  2030 00001786 C3                      	retn
  2031                                  
  2032 00001787 90                      align 2
  2033                                  
  2034                                  prg_msg:
  2035 00001788 0D0A07                  	db 0Dh, 0Ah, 07h
  2036 0000178B 4469736B2052656164-     	db 'Disk Read Utility - TRDOS 386 v2 Disk I/O and timer test.'
  2036 00001794 205574696C69747920-
  2036 0000179D 2D205452444F532033-
  2036 000017A6 383620763220446973-
  2036 000017AF 6B20492F4F20616E64-
  2036 000017B8 2074696D6572207465-
  2036 000017C1 73742E             
  2037 000017C4 0D0A                    	db 0Dh, 0Ah	
  2038                                  	;;db 'by Erdogan Tan  [07/07/2016]'
  2039                                  	;db 'by Erdogan Tan  [27/10/2020]'  ; LBA disk (>8GB) bugfix
  2040 000017C6 6279204572646F6761-     	db 'by Erdogan Tan  [22/11/2020]' ; Video page size bugfix
  2040 000017CF 6E2054616E20205B32-
  2040 000017D8 322F31312F32303230-
  2040 000017E1 5D                 
  2041 000017E2 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
  2042 000017E6 28507265737320616E-             db '(Press any key to continue...)'
  2042 000017EF 79206B657920746F20-
  2042 000017F8 636F6E74696E75652E-
  2042 00001801 2E2E29             
  2043 00001804 0D0A00                  	db 0Dh, 0Ah, 0
  2044                                  
  2045                                  drv_not_ready:
  2046 00001807 070D0A                  	db 07h, 0Dh, 0Ah 
  2047 0000180A 4472697665206E6F74-     	db 'Drive not ready !'
  2047 00001813 2072656164792021   
  2048 0000181B 0D0A00                  	db 0Dh, 0Ah, 0
  2049                                  
  2050 0000181E 30                      fd0_type: db '0'
  2051 0000181F 30                      fd1_type: db '0'
  2052                                  
  2053                                  rtc_msg:
  2054 00001820 5265616C2054696D65-     	db "Real Time Clock - "
  2054 00001829 20436C6F636B202D20 
  2055                                  datestr:
  2056 00001832 30302F30302F303030-     	db "00/00/0000"
  2056 0000183B 30                 
  2057 0000183C 2020                    	db "  "
  2058                                  timestr:	
  2059 0000183E 30303A30303A3030                db "00:00:00"
  2060                                  rtc_msg_end:
  2061 00001846 00                      	db 0
  2062                                  
  2063                                  timer_event:
  2064 00001847 00                      	db 0 
  2065                                  
  2066                                  align 4 ; dword alignment
  2067                                  
  2068 00001848 [601B0000]              current_txtpos: dd video_buffer
  2069                                  
  2070                                  bss_start:
  2071                                  
  2072                                  ABSOLUTE bss_start
  2073                                  
  2074 0000184C <res 00000002>          cursor_posn: resw 1
  2075 0000184E <res 00000002>          cursor_shp:  resw 1
  2076 00001850 <res 00000002>          cursor_posb: resw 1 ; (cursor position backup, for video page 0)
  2077                                  
  2078 00001852 <res 00000001>          txtposoff:   resb 1 ; txtpos offset for sector number input	
  2079 00001853 <res 00000001>          dscmd:	     resb 1 ; 0 = change drive
  2080                                  	            ; 1 = change sector
  2081                                  	            ; 2 = display disk parameters
  2082                                  
  2083 00001854 <res 00000001>          inds:	     resb 1 	 
  2084 00001855 <res 00000001>          paragr:	     resb 1	 
  2085                                  
  2086 00001856 <res 00000001>          ibcp:	     resb 1 ; input box - row position
  2087 00001857 <res 00000001>          	     resb 1 ; input box - column position
  2088                                  
  2089 00001858 <res 00000001>          retry_count: resb 1
  2090 00001859 <res 00000001>          drv:	     resb 1  ; physical drive number (0, 1, 80h, 81h, 82h, 83h)
  2091                                  
  2092 0000185A <res 00000002>          drv_status:  resb 2  ; fd0, fd1 (FFh = failure, 80h = existing)		
  2093 0000185C <res 00000004>          	     resb 4  ; hd0, hd1 hd2, hd3 (FFh = failure)
  2094                                                      ;                   (80h - 87h = existing)
  2095                                                      ;                   (bit 0 = 1 : LBA ready)
  2096                                  
  2097 00001860 <res 0000000C>          drv_cylinders :	resw 6
  2098 0000186C <res 0000000C>          drv_heads     :	resw 6
  2099 00001878 <res 0000000C>          drv_spt       :	resw 6
  2100                                  alignb 4
  2101 00001884 <res 00000018>          drv_size :	resd 6
  2102                                  
  2103 0000189C <res 00000010>          fd0_dpt: resb 16
  2104 000018AC <res 00000010>          fd1_dpt: resb 16
  2105 000018BC <res 00000020>          hd0_dpt: resb 32
  2106 000018DC <res 00000020>          hd1_dpt: resb 32
  2107 000018FC <res 00000020>          hd2_dpt: resb 32
  2108 0000191C <res 00000020>          hd3_dpt: resb 32
  2109                                  
  2110                                  ds_sec:
  2111 0000193C <res 00000004>          	resd 1 ; Current sector (on display), drv 0		
  2112 00001940 <res 00000004>          	resd 1 ; Current sector (on display), drv 1
  2113 00001944 <res 00000004>          	resd 1 ; Current sector (on display), drv 2
  2114 00001948 <res 00000004>          	resd 1 ; Current sector (on display), drv 3
  2115 0000194C <res 00000004>          	resd 1 ; Current sector (on display), drv 4
  2116 00001950 <res 00000004>          	resd 1 ; Current sector (on display), drv 5
  2117                                  
  2118 00001954 <res 00000004>          prev_sec: resd 1  ; previous sector (before reading)	
  2119                                  
  2120                                  sector_buffer:
  2121 00001958 <res 00000200>          	resb 512
  2122                                  
  2123                                  date_day:
  2124 00001B58 <res 00000001>          	resb 1
  2125                                  date_month:
  2126 00001B59 <res 00000001>          	resb 1
  2127                                  date_year:
  2128 00001B5A <res 00000001>          	resb 1
  2129                                  date_century:
  2130 00001B5B <res 00000001>          	resb 1
  2131                                  
  2132                                  time_second:
  2133 00001B5C <res 00000001>          	resb 1
  2134                                  time_minute:
  2135 00001B5D <res 00000001>          	resb 1
  2136                                  time_hour:
  2137 00001B5E <res 00000001>          	resb 1
  2138                                  	
  2139 00001B5F <res 00000001>          	resb 1
  2140                                  
  2141                                  video_buffer:
  2142                                  	;resb	4000 ; 80*25*2
  2143 00001B60 <res 00001000>          	resb	4096 ; 22/11/2020
  2144                                  
  2145                                  timer_event_number:
  2146 00002B60 <res 00000001>          	resb 1
  2147                                  
  2148 00002B61 <res 00000001>          hdc:	resb 1
  2149 00002B62 <res 00000001>          fdc:	resb 1
  2150                                  
  2151                                  prev_drv:
  2152 00002B63 <res 00000001>          	resb 1
  2153                                  
  2154                                  alignb 4
  2155                                  
  2156                                  bss_end:
  2157                                  	
  2158                                  _end:
