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