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 cursor_posn: resw 1 2065 0000184E cursor_shp: resw 1 2066 00001850 cursor_posb: resw 1 ; (cursor position backup, for video page 0) 2067 2068 00001852 txtposoff: resb 1 ; txtpos offset for sector number input 2069 00001853 dscmd: resb 1 ; 0 = change drive 2070 ; 1 = change sector 2071 ; 2 = display disk parameters 2072 2073 00001854 inds: resb 1 2074 00001855 paragr: resb 1 2075 2076 00001856 ibcp: resb 1 ; input box - row position 2077 00001857 resb 1 ; input box - column position 2078 2079 00001858 retry_count: resb 1 2080 00001859 drv: resb 1 ; physical drive number (0, 1, 80h, 81h, 82h, 83h) 2081 2082 0000185A drv_status: resb 2 ; fd0, fd1 (FFh = failure, 80h = existing) 2083 0000185C resb 4 ; hd0, hd1 hd2, hd3 (FFh = failure) 2084 ; (80h - 87h = existing) 2085 ; (bit 0 = 1 : LBA ready) 2086 2087 00001860 drv_cylinders : resw 6 2088 0000186C drv_heads : resw 6 2089 00001878 drv_spt : resw 6 2090 alignb 4 2091 00001884 drv_size : resd 6 2092 2093 0000189C fd0_dpt: resb 16 2094 000018AC fd1_dpt: resb 16 2095 000018BC hd0_dpt: resb 32 2096 000018DC hd1_dpt: resb 32 2097 000018FC hd2_dpt: resb 32 2098 0000191C hd3_dpt: resb 32 2099 2100 ds_sec: 2101 0000193C resd 1 ; Current sector (on display), drv 0 2102 00001940 resd 1 ; Current sector (on display), drv 1 2103 00001944 resd 1 ; Current sector (on display), drv 2 2104 00001948 resd 1 ; Current sector (on display), drv 3 2105 0000194C resd 1 ; Current sector (on display), drv 4 2106 00001950 resd 1 ; Current sector (on display), drv 5 2107 2108 00001954 prev_sec: resd 1 ; previous sector (before reading) 2109 2110 sector_buffer: 2111 00001958 resb 512 2112 2113 date_day: 2114 00001B58 resb 1 2115 date_month: 2116 00001B59 resb 1 2117 date_year: 2118 00001B5A resb 1 2119 date_century: 2120 00001B5B resb 1 2121 2122 time_second: 2123 00001B5C resb 1 2124 time_minute: 2125 00001B5D resb 1 2126 time_hour: 2127 00001B5E resb 1 2128 2129 00001B5F resb 1 2130 2131 video_buffer: 2132 00001B60 resb 4000 ; 80*25*2 2133 2134 timer_event_number: 2135 00002B00 resb 1 2136 2137 00002B01 hdc: resb 1 2138 00002B02 fdc: resb 1 2139 2140 prev_drv: 2141 00002B03 resb 1 2142 2143 alignb 4 2144 2145 bss_end: 2146 2147 _end: