1 ; **************************************************************************** 2 ; dsectpm2.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'dsectpm2.prg') 3 ; --------------------------------------------------------------------------- 4 ; DSECTPM2.PRG ! TEST program ! 5 ; 'Display Disk Sectors' by using TRDOS 386 disk and timer interrupts. 6 ; 7 ; 27/05/2016 8 ; 9 ; Derived from 'dsectrm2.s' source code for Retro UNIX 386 v1 'boot' 10 ; 11 ; [ Last Modification: 26/08/2020 ] 12 ; 13 ; **************************************************************************** 14 ; dsectrm2.s (21/02/2015, Retro UNIX 386 v1, standalone program, real mode) 15 ; dsectpm.s (28/02/2015, Retro UNIX 386 v1, standalone prog, protected mode) 16 ; 17 ; Assembler: NASM 2.11 18 19 ; display disk sector data [R etro Unix 386 v1 - test ] 20 ; by Erdogan Tan [ Real Mode adaption (Standalone program), 21/02/2015 ] 21 22 ESCKey equ 1Bh ;27 23 ENTERKey equ 0Dh ;13 24 SPACEKey equ 20h ;32 25 BACKSPC equ 08h ; 8 26 DELKey equ 53E0h 27 F1Key equ 3B00h 28 F2Key equ 3C00h 29 F3Key equ 3D00h 30 HOMEKey equ 47E0h 31 ENDKey equ 4FE0h 32 PgUpKey equ 49E0h 33 PgDnKey equ 51E0h 34 35 ; 02/07/2016 36 37 [BITS 32] 38 39 ; clear bss area 40 41 ; ecx = 0 42 00000000 B9B8120000 mov ecx, bss_end - bss_start 43 00000005 66C1E902 shr cx, 2 ; dword count 44 00000009 BF[D8160000] mov edi, bss_start 45 ; eax = 0 46 ;xor eax, eax 47 0000000E F3AB rep stosd 48 49 00000010 BE[12160000] mov esi, prg_msg 50 00000015 E87F0D0000 call print_msg 51 52 ; Filling disk parameters tables 53 _fd0: 54 ;xor dl, dl ; fd0 55 ;mov [drv], dl 56 0000001A BB[28170000] mov ebx, fd0_dpt 57 0000001F B408 mov ah, 08h ; return disk parameters 58 00000021 CD33 int 33h ; TRDOS 386 disk io interrupt 59 00000023 724B jc short _hd0 60 00000025 C605[E6160000]80 mov byte [drv_status], 80h 61 0000002C 001D[A8160000] add [fd0_type], bl 62 00000032 8815[8E290000] mov [fdc], dl 63 00000038 E878080000 call set_disk_parms 64 0000003D FE0D[8E290000] dec byte [fdc] 65 00000043 742B jz short _hd0 66 _fd1: 67 00000045 B201 mov dl, 1 ; fd1 68 00000047 8815[E5160000] mov [drv], dl 69 0000004D BB[38170000] mov ebx, fd1_dpt 70 00000052 B408 mov ah, 08h ; return disk parameters 71 00000054 CD33 int 33h ; TRDOS 386 disk io interrupt 72 00000056 7218 jc short _hd0 73 00000058 C605[E7160000]80 mov byte [drv_status+1], 80h 74 0000005F 001D[A9160000] add [fd1_type], bl 75 00000065 E84B080000 call set_disk_parms 76 0000006A FE0D[8E290000] dec byte [fdc] ; = 0 77 _hd0: 78 00000070 B280 mov dl, 80h ; hd0 79 00000072 8815[E5160000] mov [drv], dl 80 00000078 BB[48170000] mov ebx, hd0_dpt 81 0000007D B408 mov ah, 08h ; return disk parameters 82 0000007F CD33 int 33h ; TRDOS 386 disk io interrupt 83 00000081 7224 jc short _hd1 84 00000083 8A4314 mov al, [ebx+16+4] ; device register, bit 6 = LBA bit 85 00000086 C0E806 shr al, 6 ; bit 6 = bit 0 86 00000089 0480 add al, 80h 87 0000008B A2[E8160000] mov [drv_status+2], al 88 00000090 8815[8D290000] mov [hdc], dl 89 00000096 E81A080000 call set_disk_parms 90 0000009B FE0D[8D290000] dec byte [hdc] ; number of fixed disk drives - 1 91 000000A1 0F8485000000 jz sccps 92 _hd1: 93 000000A7 B281 mov dl, 81h ; hd1 94 000000A9 8815[E5160000] mov [drv], dl 95 000000AF BB[68170000] mov ebx, hd1_dpt 96 000000B4 B408 mov ah, 08h ; return disk parameters 97 000000B6 CD33 int 33h ; TRDOS 386 disk io interrupt 98 000000B8 721A jc short _hd2 99 000000BA 8A4314 mov al, [ebx+16+4] ; device register, bit 6 = LBA bit 100 000000BD C0E806 shr al, 6 ; bit 6 = bit 0 101 000000C0 0480 add al, 80h 102 000000C2 A2[E9160000] mov [drv_status+3], al 103 000000C7 E8E9070000 call set_disk_parms 104 000000CC FE0D[8D290000] dec byte [hdc] 105 000000D2 7458 jz short sccps 106 _hd2: 107 000000D4 B282 mov dl, 82h ; hd2 108 000000D6 8815[E5160000] mov [drv], dl 109 000000DC BB[88170000] mov ebx, hd2_dpt 110 000000E1 B408 mov ah, 08h ; return disk parameters 111 000000E3 CD33 int 33h ; TRDOS 386 disk io interrupt 112 000000E5 721A jc short _hd3 113 000000E7 8A4314 mov al, [ebx+16+4] ; device register, bit 6 = LBA bit 114 000000EA C0E806 shr al, 6 ; bit 6 = bit 0 115 000000ED 0480 add al, 80h 116 000000EF A2[EA160000] mov [drv_status+4], al 117 000000F4 E8BC070000 call set_disk_parms 118 000000F9 FE0D[8D290000] dec byte [hdc] 119 000000FF 742B jz short sccps 120 _hd3: 121 00000101 B283 mov dl, 83h ; hd3 122 00000103 8815[E5160000] mov [drv], dl 123 00000109 BB[A8170000] mov ebx, hd3_dpt 124 0000010E B408 mov ah, 08h ; return disk parameters 125 00000110 CD33 int 33h ; TRDOS 386 disk io interrupt 126 00000112 7218 jc short sccps 127 00000114 8A4314 mov al, [ebx+16+4] ; device register, bit 6 = LBA bit 128 00000117 C0E806 shr al, 6 ; bit 6 = bit 0 129 0000011A 0480 add al, 80h 130 0000011C A2[EB160000] mov [drv_status+5], al 131 00000121 E88F070000 call set_disk_parms 132 00000126 FE0D[8D290000] dec byte [hdc] ; = 0 133 134 sccps: 135 ; get cursor position 136 0000012C 31DB xor ebx, ebx ; bh = video page 0 137 0000012E B403 mov ah, 03h ; get cursor position and shape 138 00000130 CD31 int 31h ; TRDOS 386 video interrupt 139 ; (IBM PC/AT ROMBIOS, INT 10h) 140 00000132 668915[D8160000] mov [cursor_posn], dx ; position 141 00000139 66890D[DA160000] mov [cursor_shp], cx ; shape 142 143 ; Save video page (before displaying sector) 144 145 ; copy video page 0 to video page 6 146 ;sub ebx, ebx ; bl = 0 -> system to system 147 ; bh = 0 -> 80*25 text mode 148 00000140 28C9 sub cl, cl ; source = video page 0 149 00000142 B206 mov dl, 6 ; destination = video page 6 150 00000144 B81F000000 mov eax, 31 ; 'sysvideo' 151 00000149 CD40 int 40h ; TRDOS 386 system call 152 153 display_sectors: 154 0000014B E847070000 call hide_cursor 155 ; Save cursor position 156 00000150 66A1[D8160000] mov ax, [cursor_posn] ; cursor pos. 157 ; for video page 0 158 00000156 66A3[DC160000] mov [cursor_posb], ax 159 0000015C E869050000 call clear_frame 160 161 ; start (Real Time Clock) timer function 162 00000161 B3FF mov bl, 0FFh ; signal return (response) byte 163 00000163 B703 mov bh, 3 ; 1 second (rtc interrupt) 164 ;mov ecx, 1 165 00000165 66B90100 mov cx, 1 166 00000169 BA[D1160000] mov edx, timer_event ; signal return (response) address 167 0000016E B821000000 mov eax, 33 ; 'systimer' 168 00000173 CD40 int 40h ; TRDOS 386 system call 169 00000175 7238 jc short dscl_0 170 171 00000177 A2[8C290000] mov [timer_event_number], al 172 173 0000017C EB31 jmp short dscl_0 174 175 dscl_esc: 176 0000017E E8FD030000 call restore_video_page 177 dscl_getc: 178 00000183 E89E030000 call getch 179 ; 180 00000188 3C1B cmp al, ESCKey 181 0000018A 0F845B030000 je dscl_exit 182 00000190 C605[DF160000]00 mov byte [dscmd], 0 183 00000197 663D003B cmp ax, F1Key 184 0000019B 7412 je short dscl_0 185 ; 186 0000019D FE05[DF160000] inc byte [dscmd] 187 000001A3 663D003D cmp ax, F3Key 188 000001A7 7530 jne short dscl_5 189 000001A9 FE05[DF160000] inc byte [dscmd] ; Display disk params. 190 dscl_0: 191 000001AF E8BE030000 call save_video_page 192 000001B4 BE[C0150000] mov esi, F1_ib ; F1 (Change drive) 193 ; Inputbox address 194 dscl_ib: 195 000001B9 E828060000 call inputbox 196 ; cursor position in DX 197 000001BE E8DB060000 call show_cursor 198 ; cursor blinks at current position 199 000001C3 8B0D[E0170000] mov ecx, [prev_sec] 200 dscl_3: 201 000001C9 E858030000 call getch 202 000001CE 3C1B cmp al, ESCKey 203 000001D0 7524 jne short dscl_27 204 000001D2 E8C0060000 call hide_cursor 205 000001D7 EBA5 jmp dscl_esc 206 dscl_5: 207 000001D9 663D003C cmp ax, F2Key 208 000001DD 0F8570020000 jne dscl_6 209 000001E3 E88A030000 call save_video_page 210 000001E8 BE[CE150000] mov esi, F2_ib ; F2 (Change sector) 211 ; Inputbox address 212 000001ED C605[DF160000]01 mov byte [dscmd], 1 213 000001F4 EBC3 jmp short dscl_ib 214 dscl_27: 215 000001F6 3C20 cmp al, SPACEKey 216 000001F8 7440 je short dscl_4 217 000001FA 3C0D cmp al, ENTERKey 218 000001FC 743C je short dscl_4 219 ; 220 000001FE 31DB xor ebx, ebx 221 00000200 803D[DF160000]01 cmp byte [dscmd], 1 222 00000207 746E je short dscl_12 223 ; 224 00000209 3C30 cmp al, '0' 225 0000020B 72BC jb short dscl_3 226 0000020D 3C35 cmp al, '5' 227 0000020F 77B8 ja short dscl_3 228 00000211 8B3D[D4160000] mov edi, [current_txtpos] 229 00000217 AA stosb 230 ; 231 ;xor bh, bh ; video page 0 232 00000218 66B90100 mov cx, 1 ; character count 233 0000021C B40A mov ah, 0Ah ; write chr at current cursor pos. 234 0000021E CD31 int 31h ; TRDOS 386 video interrupt 235 ; 236 00000220 2C30 sub al, '0' 237 00000222 88C2 mov dl, al 238 00000224 30F6 xor dh, dh 239 00000226 88C3 mov bl, al 240 00000228 C0E302 shl bl, 2 ; *4 241 0000022B 81C3[C8170000] add ebx, ds_sec ; current_sector 242 00000231 8B0B mov ecx, [ebx] 243 00000233 BE[E4170000] mov esi, sector_buffer 244 00000238 EB8F jmp short dscl_3 245 dscl_4: 246 0000023A 803D[E0160000]00 cmp byte [inds], 0 ; display other half or not ? 247 00000241 0F8720010000 ja dscl_oh ; other half 248 00000247 6652 push dx 249 ; save regs (ESI, ECX, DX) 250 00000249 E849060000 call hide_cursor 251 ; restore regs (ESI, ECX, DX) 252 0000024E 665A pop dx 253 00000250 89C8 mov eax, ecx 254 ; 255 00000252 803D[DF160000]01 cmp byte [dscmd], 1 ; Requested function ? 256 00000259 0F84CB000000 je dscl_17 ; Change sector (F2) 257 0000025F 0F823C010000 jb dscl_ns ; Change drive (F1) 258 259 ; Display disk parameters (dscmd = 2) 260 00000265 80FA02 cmp dl, 2 261 00000268 7203 jb short dscl_28 262 0000026A 80C27E add dl, 7Eh 263 dscl_28: 264 0000026D E80E080000 call dskprm 265 00000272 E907FFFFFF jmp dscl_esc 266 dscl_12: 267 00000277 663DE053 cmp ax, DELKey ; DEL key 268 0000027B 7404 je short dscl_bs 269 0000027D 3C08 cmp al, BACKSPC ; Backspace key 270 0000027F 7535 jne short dscl_13 271 dscl_bs: 272 00000281 803D[DE160000]00 cmp byte [txtposoff], 0 273 00000288 0F863BFFFFFF jna dscl_3 274 0000028E FE0D[DE160000] dec byte [txtposoff] 275 00000294 FE0D[D8160000] dec byte [cursor_posn] 276 0000029A E865130000 call set_cpos 277 0000029F 0FB61D[DE160000] movzx ebx, byte [txtposoff] 278 000002A6 FE0D[DE160000] dec byte [txtposoff] 279 000002AC FE0D[D8160000] dec byte [cursor_posn] 280 000002B2 B020 mov al, 20h 281 000002B4 EB1B jmp short dscl_14 282 dscl_13: 283 000002B6 8A1D[DE160000] mov bl, [txtposoff] 284 000002BC 80FB08 cmp bl, 8 285 000002BF 0F8304FFFFFF jnb dscl_3 286 ; 287 000002C5 3C30 cmp al, '0' 288 000002C7 0F82FCFEFFFF jb dscl_3 289 000002CD 3C39 cmp al, '9' 290 000002CF 7739 ja short dscl_15 291 dscl_14: 292 000002D1 D0E3 shl bl, 1 293 000002D3 8B35[D4160000] mov esi, [current_txtpos] 294 000002D9 01F3 add ebx, esi 295 000002DB 8803 mov [ebx], al 296 ; 297 000002DD 30FF xor bh, bh ; video page 0 298 000002DF 66B90100 mov cx, 1 ; character count 299 000002E3 B40A mov ah, 0Ah ; write chr at current cursor pos. 300 000002E5 CD31 int 31h ; TRDOS 386 video interrupt 301 ; 302 000002E7 803D[DE160000]08 cmp byte [txtposoff], 8 303 000002EE 0F8DD5FEFFFF jge dscl_3 ; JGE ! 304 000002F4 FE05[DE160000] inc byte [txtposoff] 305 000002FA FE05[D8160000] inc byte [cursor_posn] 306 00000300 E8FF120000 call set_cpos 307 00000305 E9BFFEFFFF jmp dscl_3 308 dscl_15: 309 0000030A 3C41 cmp al, 'A' 310 0000030C 0F82B7FEFFFF jb dscl_3 311 00000312 3C46 cmp al, 'F' 312 00000314 76BB jna short dscl_14 313 dscl_16: 314 00000316 3C61 cmp al, 'a' 315 00000318 0F82ABFEFFFF jb dscl_3 316 0000031E 3C66 cmp al, 'f' 317 00000320 0F87A3FEFFFF ja dscl_3 318 00000326 2C20 sub al, 'a' - 'A' 319 00000328 EBA7 jmp short dscl_14 320 ; 321 dscl_17: 322 0000032A 8B35[D4160000] mov esi, [current_txtpos] 323 00000330 31C0 xor eax, eax 324 00000332 A2[DE160000] mov byte [txtposoff], al ; 0 325 00000337 50 push eax ; sector value (reset) 326 dscl_18: 327 00000338 66AD lodsw 328 0000033A 3C30 cmp al, '0' 329 0000033C 7219 jb short dscl_22 330 dscl_19: 331 0000033E 29C9 sub ecx, ecx 332 00000340 BB[8C140000] mov ebx, hexchrs 333 dscl_20: 334 00000345 3A03 cmp al, [ebx] 335 00000347 7405 je short dscl_21 336 ;cmp cl, 15 337 ;jnb short dscl_22 338 00000349 FEC1 inc cl 339 0000034B 43 inc ebx 340 0000034C EBF7 jmp short dscl_20 341 dscl_21: 342 0000034E 58 pop eax 343 0000034F C1E004 shl eax, 4 ; * 16 344 00000352 01C8 add eax, ecx 345 00000354 50 push eax 346 00000355 EBE1 jmp short dscl_18 347 dscl_22: 348 00000357 8A15[9C140000] mov dl, [ds_drv] 349 0000035D 30F6 xor dh, dh 350 0000035F 58 pop eax 351 00000360 BE[E4170000] mov esi, sector_buffer 352 00000365 EB3A jmp short dscl_ns 353 dscl_oh: 354 00000367 8A15[9C140000] mov dl, [ds_drv] 355 0000036D 0FB6DA movzx ebx, dl 356 00000370 C0E302 shl bl, 2 357 00000373 81C3[C8170000] add ebx, ds_sec 358 00000379 8B03 mov eax, [ebx] 359 0000037B BE[E4170000] mov esi, sector_buffer 360 ; 361 00000380 8A35[9D140000] mov dh, [ds_drv+1] 362 00000386 08F6 or dh, dh 363 00000388 7404 jz short dscl_nh ; second half of sector (0->1) 364 0000038A 30F6 xor dh, dh ; reset (0) 365 0000038C EB08 jmp short dscl_nx 366 dscl_nh: 367 0000038E 81C600010000 add esi, 256 368 00000394 FEC6 inc dh 369 dscl_nx: 370 00000396 8835[9D140000] mov [ds_drv+1], dh 371 0000039C E991000000 jmp dscl_25 372 dscl_ns: 373 000003A1 8835[9D140000] mov [ds_drv+1], dh 374 000003A7 0FB6DA movzx ebx, dl 375 000003AA C0E302 shl bl, 2 376 000003AD 81C3[C8170000] add ebx, ds_sec 377 000003B3 3A15[9C140000] cmp dl, [ds_drv] 378 000003B9 7504 jne short dscl_23 379 000003BB 3B03 cmp eax, [ebx] 380 000003BD 7473 je dscl_25 381 dscl_23: 382 000003BF 8A0D[9C140000] mov cl, [ds_drv] 383 000003C5 880D[8F290000] mov [prev_drv], cl 384 000003CB 8815[9C140000] mov [ds_drv], dl 385 dscl_26: 386 000003D1 8B0B mov ecx, [ebx] 387 000003D3 890D[E0170000] mov [prev_sec], ecx 388 000003D9 8903 mov [ebx], eax 389 000003DB E870050000 call read_disk_sector 390 000003E0 7336 jnc short dscl_24 391 dscl_rd_err: 392 ; 393 ;mov al, ah ; error code 394 ;mov edi, err_code_str 395 ;call write_hex 396 ; 397 000003E2 BE[DE150000] mov esi, dskr_err ; drive not ready or read error 398 000003E7 E8FA030000 call inputbox 399 000003EC E835010000 call getch 400 000003F1 E88A010000 call restore_video_page 401 000003F6 0FB61D[8F290000] movzx ebx, byte [prev_drv] 402 000003FD 881D[9C140000] mov [ds_drv], bl 403 00000403 C0E302 shl bl, 2 404 00000406 81C3[C8170000] add ebx, ds_sec 405 0000040C A1[E0170000] mov eax, [prev_sec] 406 00000411 8903 mov [ebx], eax 407 00000413 E96BFDFFFF jmp dscl_getc 408 dscl_24: 409 00000418 668B15[9C140000] mov dx, [ds_drv] 410 0000041F 0FB6DA movzx ebx, dl 411 00000422 C0E302 shl bl, 2 412 00000425 81C3[C8170000] add ebx, ds_sec 413 0000042B 8B03 mov eax, [ebx] 414 0000042D BE[E4170000] mov esi, sector_buffer 415 dscl_25: 416 00000432 E865010000 call display_sector 417 00000437 E836010000 call save_video_page 418 0000043C E942FDFFFF jmp dscl_getc 419 dscl_11: 420 00000441 BE[E4170000] mov esi, sector_buffer 421 00000446 8A15[9C140000] mov dl, [ds_drv] 422 0000044C 28F6 sub dh, dh ; 0 = first half of sector 423 0000044E E94EFFFFFF jmp dscl_ns 424 dscl_6: 425 00000453 3C20 cmp al, SPACEKey 426 00000455 0F840CFFFFFF je dscl_oh 427 0000045B 3C0D cmp al, ENTERKey 428 0000045D 0F8404FFFFFF je dscl_oh 429 ; 430 00000463 663DE047 cmp ax, HOMEKey 431 00000467 7504 jne short dscl_7 432 00000469 31C0 xor eax, eax 433 0000046B EBD4 jmp short dscl_11 434 dscl_7: 435 0000046D 663DE04F cmp ax, ENDKey 436 00000471 7515 jne short dscl_8 437 00000473 0FB61D[9C140000] movzx ebx, byte [ds_drv] 438 0000047A C0E302 shl bl, 2 439 0000047D 81C3[10170000] add ebx, drv_size 440 00000483 8B03 mov eax, [ebx] 441 00000485 48 dec eax 442 00000486 EBB9 jmp short dscl_11 443 dscl_8: 444 00000488 663DE051 cmp ax, PgDnKey 445 0000048C 753E jne short dscl_10 446 0000048E E810000000 call dscl_9 447 00000493 40 inc eax 448 00000494 39C8 cmp eax, ecx ; last sector 449 00000496 0F8605FFFFFF jna dscl_ns 450 0000049C 31C0 xor eax, eax 451 0000049E E92EFFFFFF jmp dscl_26 452 dscl_9: 453 000004A3 0FB615[9C140000] movzx edx, byte [ds_drv] 454 000004AA 89D3 mov ebx, edx 455 000004AC C0E302 shl bl, 2 ; *4 456 000004AF 81C3[10170000] add ebx, drv_size 457 000004B5 8B0B mov ecx, [ebx] 458 000004B7 49 dec ecx 459 000004B8 81EB[10170000] sub ebx, drv_size 460 000004BE 81C3[C8170000] add ebx, ds_sec ; current sector 461 000004C4 8B03 mov eax, [ebx] 462 000004C6 BE[E4170000] mov esi, sector_buffer 463 000004CB C3 retn 464 dscl_10: 465 000004CC 663DE049 cmp ax, PgUpKey 466 000004D0 0F85ADFCFFFF jne dscl_getc 467 000004D6 E8C8FFFFFF call dscl_9 468 000004DB 48 dec eax 469 000004DC 39C8 cmp eax, ecx ; last sector 470 000004DE 0F86BDFEFFFF jna dscl_ns 471 000004E4 89C8 mov eax, ecx 472 000004E6 E9E6FEFFFF jmp dscl_26 473 474 dscl_exit: 475 ; 476 ; Stop timer event 477 000004EB 0FB61D[8C290000] movzx ebx, byte [timer_event_number] 478 ; bh = 0 -> stop timer event 479 480 000004F2 20DB and bl, bl 481 000004F4 7409 jz short dscl_rvp 482 000004F6 B821000000 mov eax, 33 ; 'systimer' 483 000004FB CD40 int 40h ; TRDOS 386 system call 484 485 000004FD 28DB sub bl, bl 486 dscl_rvp: 487 ; Restore video page (before displaying sector) 488 489 ; copy video page 6 to video page 0 490 ;sub ebx, ebx ; bl = 0 -> system to system 491 ; bh = 0 -> 80*25 text mode 492 000004FF B106 mov cl, 6 ; source = video page 6 493 494 00000501 E87E000000 call restore_v_pg_x 495 496 ; Restore cursor position 497 00000506 668B15[DC160000] mov dx, [cursor_posb] 498 ; 499 ; Set cursor position 500 ;xor bh, bh ; Video page 0 501 0000050D B402 mov ah, 2 ; set cursor position 502 0000050F CD31 int 31h ; TRDOS 386 video interrupt 503 504 ; Show standard blinking text cursor 505 00000511 668B0D[DA160000] mov cx, [cursor_shp] 506 00000518 B401 mov ah, 1 ; set cursor type 507 0000051A CD31 int 31h ; TRDOS 386 video interrupt 508 509 terminate: 510 0000051C B801000000 mov eax, 1 ; 'sysexit' 511 00000521 CD40 int 40h ; TRDOS 386 system call 512 haltsys: 513 00000523 F4 hlt 514 00000524 EBFD jmp short haltsys 515 516 getch: 517 dscl_rtc_p: 518 00000526 803D[D1160000]00 cmp byte [timer_event], 0 519 0000052D 7638 jna short dscl_getch 520 521 ; timer function 522 0000052F C605[D1160000]00 mov byte [timer_event], 0 523 524 00000536 BF[DC1A0000] mov edi, video_buffer + 0A0h + 50h ; Row 1, Column 40 525 0000053B 807F013F cmp byte [edi+1], 3Fh ; cyan (3) Background 526 ; white (F) forecolor 527 ; (display disk sector frame) 528 0000053F 752C jne short dscl_getchar 529 530 00000541 51 push ecx 531 00000542 52 push edx 532 533 00000543 E8F3010000 call rtc_p 534 535 ; print real time clock content (as formatted) 536 ; to video page line 1, column 40 537 00000548 BE[DC1A0000] mov esi, video_buffer + 0A0h + 50h 538 0000054D B928000100 mov ecx, 10028h ; row 1, column 40 (top left) 539 00000552 BA4E000100 mov edx, 10028h + rtc_msg_end - rtc_msg ; (bottom right) 540 ; row 1, column 40 + rtc_msg lenth 541 00000557 29FF sub edi, edi ; no swap 542 00000559 BB05000000 mov ebx, 5 ; user to system window transfer (active page) 543 0000055E B81F000000 mov eax, 31 ; 'sysvideo' 544 00000563 CD40 int 40h ; TRDOS 386 system call 545 546 00000565 5A pop edx 547 00000566 59 pop ecx 548 549 dscl_getch: 550 ; Check keyboard buffer 551 00000567 B411 mov ah, 11h 552 00000569 CD32 int 32h ; TRDOS 386 keyboard interrupt 553 ; (IBM PC/AT ROMBIOS, INT 16h) 554 0000056B 74B9 jz short dscl_rtc_p ; keyboard buffer empty 555 556 dscl_getchar: 557 ; Getchar by using keyboard interrupt 558 0000056D B410 mov ah, 10h 559 0000056F CD32 int 32h ; TRDOS 386 keyboard interrupt 560 ; (IBM PC/AT ROMBIOS, INT 16h) 561 00000571 C3 retn 562 563 save_video_page: 564 ; Save video page 565 566 ; copy video page 0 to video page 7 567 00000572 29DB sub ebx, ebx ; bl = 0 -> system to system 568 ; bh = 0 -> 80*25 text mode 569 00000574 28C9 sub cl, cl ; source = video page 0 570 00000576 B207 mov dl, 7 ; destination = video page 7 571 00000578 B81F000000 mov eax, 31 ; 'sysvideo' 572 0000057D CD40 int 40h ; TRDOS 386 system call 573 574 0000057F C3 retn 575 576 restore_video_page: 577 ; copy video page 7 to video page 0 578 00000580 29DB sub ebx, ebx ; bl = 0 -> system to system 579 ; bh = 0 -> 80*25 text mode 580 00000582 B107 mov cl, 7 ; source = video page 7 581 582 restore_v_pg_x: 583 00000584 28D2 sub dl, dl ; destination = video page 0 584 00000586 B81F000000 mov eax, 31 ; 'sysvideo' 585 0000058B CD40 int 40h ; TRDOS 386 system call 586 587 0000058D B302 mov bl, 2 ; system to user 588 ;xor dl, dl ; video page 0 589 0000058F B9[EC190000] mov ecx, video_buffer ; user buffer 590 00000594 B81F000000 mov eax, 31 ; 'sysvideo' 591 00000599 CD40 int 40h ; TRDOS 386 system call 592 593 0000059B C3 retn 594 595 display_sector: 596 ; display disk sector data (on video page 0) 597 ; 598 ; INPUT -> 599 ; ESI = sector buffer offset 600 ; (sector size: 512 bytes) 601 ; EAX = sector number 602 ; DL = drive number (0,1,2,3,4,5,6) 603 ; DH = portion control byte 604 ; (0= first half of the sector, 605 ; >0= second half of the sector) 606 ; OUTPUT -> 607 ; Video page 0 (0B8000h) will be filled 608 ; with sector data 609 ; (ESI points to byte 256 of the buffer 610 ; or end of the buffer) 611 ; 612 ; Modified registers: eax, edx, ecx, ebx, esi, edi 613 ; 614 ; 615 ;xor ecx, ecx ; reset for cx loop counts 616 0000059C C605[E0160000]01 mov byte [inds], 1 ; for ENTER key handling 617 ; 618 000005A3 50 push eax 619 000005A4 52 push edx 620 000005A5 E820010000 call clear_frame 621 000005AA 5A pop edx 622 000005AB 58 pop eax 623 dsfh: 624 000005AC 31DB xor ebx, ebx 625 000005AE 08F6 or dh, dh 626 000005B0 7402 jz short dsfh1 627 000005B2 B310 mov bl, 10h 628 dsfh1: 629 000005B4 881D[E1160000] mov [paragr], bl ; Paragraph (16 bytes) 630 ; 631 000005BA 88D3 mov bl, dl 632 000005BC C0E302 shl bl, 2 ; *4 633 000005BF 81C3[9E140000] add ebx, drv_names 634 000005C5 8B13 mov edx, [ebx] 635 000005C7 8915[BF140000] mov [drv_name], edx 636 000005CD E8BF000000 call dwordtohex 637 000005D2 8915[CD140000] mov [sector_num], edx 638 000005D8 A3[D1140000] mov [sector_num+4], eax 639 000005DD B001 mov al, 1 640 000005DF B43F mov ah, 3Fh ; cyan background, white forecolor 641 000005E1 BB[B6140000] mov ebx, dpheader 642 000005E6 E8CC000000 call print_line 643 000005EB B015 mov al, 21 644 ;mov ah, 3Fh ; cyan background, white forecolor 645 000005ED BB[27150000] mov ebx, dpfooter1 646 000005F2 E8C0000000 call print_line 647 000005F7 B016 mov al, 22 648 ;mov ah, 3Fh ; cyan background, white forecolor 649 000005F9 BB[71150000] mov ebx, dpfooter2 650 000005FE E8B4000000 call print_line 651 ds1: 652 00000603 B910000000 mov ecx, 16 653 ds2: 654 00000608 A0[E1160000] mov al, [paragr] 655 0000060D E841000000 call bytetohex 656 00000612 66A3[DD140000] mov [sdline_1], ax 657 ; 658 00000618 51 push ecx 659 00000619 B110 mov cl, 16 660 0000061B BF[E5140000] mov edi, sdline_2 661 ds3: 662 00000620 AC lodsb 663 00000621 E82D000000 call bytetohex 664 00000626 66AB stosw 665 00000628 47 inc edi 666 00000629 E2F5 loop ds3 667 0000062B 83EE10 sub esi, 16 668 0000062E 47 inc edi 669 0000062F B110 mov cl, 16 670 00000631 F3A4 rep movsb 671 00000633 59 pop ecx 672 00000634 B013 mov al, 19 ; line (row) 3 to 24 673 00000636 28C8 sub al, cl 674 00000638 B407 mov ah, 07h ; Black background, light gray forecolor 675 0000063A BB[D7140000] mov ebx, sdline 676 0000063F E85F000000 call print_line_80 ; 04/12/2014 677 00000644 E205 loop ds4 678 679 ;call video_page_update 680 ;retn 681 682 00000646 E9B8000000 jmp video_page_update 683 ds4: 684 0000064B FE05[E1160000] inc byte [paragr] 685 00000651 EBB5 jmp short ds2 686 687 ; Convert binary number to hexadecimal string 688 689 bytetohex: 690 ; INPUT -> 691 ; AL = byte (binary number) 692 ; OUTPUT -> 693 ; AX = hexadecimal string 694 ; 695 00000653 53 push ebx 696 00000654 0FB6D8 movzx ebx, al 697 00000657 C0EB04 shr bl, 4 698 0000065A 8A9B[8C140000] mov bl, [ebx+hexchrs] 699 00000660 86D8 xchg bl, al 700 00000662 80E30F and bl, 0Fh 701 00000665 8AA3[8C140000] mov ah, [ebx+hexchrs] 702 0000066B 5B pop ebx 703 0000066C C3 retn 704 705 wordtohex: 706 ; INPUT -> 707 ; AX = word (binary number) 708 ; OUTPUT -> 709 ; EAX = hexadecimal string 710 ; 711 0000066D 53 push ebx 712 0000066E 86E0 xchg ah, al 713 00000670 6650 push ax 714 00000672 0FB6DC movzx ebx, ah 715 00000675 C0EB04 shr bl, 4 716 00000678 8A83[8C140000] mov al, [ebx+hexchrs] 717 0000067E 88E3 mov bl, ah 718 00000680 80E30F and bl, 0Fh 719 00000683 8AA3[8C140000] mov ah, [ebx+hexchrs] 720 00000689 C1E010 shl eax, 16 721 0000068C 6658 pop ax 722 0000068E 5B pop ebx 723 0000068F EBC2 jmp short bytetohex 724 ;mov bl, al 725 ;shr bl, 4 726 ;mov bl, [ebx+hexchrs] 727 ;xchg bl, al 728 ;and bl, 0Fh 729 ;mov ah, [ebx+hexchrs] 730 ;pop ebx 731 ;retn 732 733 dwordtohex: 734 ; INPUT -> 735 ; EAX = dword (binary number) 736 ; OUTPUT -> 737 ; EDX:EAX = hexadecimal string 738 ; 739 00000691 50 push eax 740 00000692 C1E810 shr eax, 16 741 00000695 E8D3FFFFFF call wordtohex 742 0000069A 89C2 mov edx, eax 743 0000069C 58 pop eax 744 0000069D E8CBFFFFFF call wordtohex 745 000006A2 C3 retn 746 747 print_line_80: 748 ; 04/12/2014 749 ; al = line (0 to 24) 750 ; ah = color attributes 751 ; ebx = 80 chars string address 752 000006A3 E881000000 call get_lpos 753 000006A8 51 push ecx 754 000006A9 B950000000 mov ecx, 80 755 pl80: 756 000006AE 8A03 mov al, [ebx] 757 000006B0 43 inc ebx 758 000006B1 66AB stosw 759 000006B3 E2F9 loop pl80 760 000006B5 59 pop ecx 761 000006B6 C3 retn 762 763 print_line: 764 ; al = line (0 to 24) 765 ; ah = color attributes 766 ; ebx = ASCIIZ string address 767 000006B7 E86D000000 call get_lpos 768 000006BC 56 push esi 769 000006BD 89DE mov esi, ebx 770 prl1: 771 000006BF AC lodsb 772 000006C0 20C0 and al, al 773 000006C2 7404 jz short prl2 774 000006C4 66AB stosw 775 000006C6 EBF7 jmp short prl1 776 prl2: 777 000006C8 5E pop esi 778 000006C9 C3 retn 779 780 clear_frame: 781 000006CA 30C0 xor al, al ; Line 0 782 000006CC E846000000 call clear_line 783 000006D1 B001 mov al, 1 784 000006D3 B43F mov ah, 3Fh ; cyan background, white forecolor 785 000006D5 E83F000000 call fill_color 786 000006DA B001 mov al, 1 787 dscf0: 788 000006DC FEC0 inc al 789 000006DE 6650 push ax 790 000006E0 E832000000 call clear_line 791 000006E5 6658 pop ax 792 000006E7 3C13 cmp al, 19 793 000006E9 72F1 jb short dscf0 794 ;inc al ; line 20 795 000006EB B43F mov ah, 3Fh 796 dscf1: 797 000006ED FEC0 inc al 798 000006EF 6650 push ax 799 000006F1 E823000000 call fill_color 800 000006F6 6658 pop ax 801 000006F8 3C17 cmp al, 23 802 000006FA 72F1 jb short dscf1 803 000006FC FEC0 inc al 804 000006FE E814000000 call clear_line 805 806 ;call video_page_update 807 ;retn 808 809 video_page_update: 810 ; copy video buffer content to video page 0 811 00000703 BB01000000 mov ebx, 1 ; BL = 1 = user to system 812 00000708 B200 mov dl, 0 ; video page 0 813 0000070A B9[EC190000] mov ecx, video_buffer 814 0000070F B81F000000 mov eax, 31 ; 'sysvideo' 815 00000714 CD40 int 40h ; TRDOS 386 system call 816 00000716 C3 retn 817 818 clear_line: 819 00000717 30E4 xor ah, ah ; blank 820 fill_color: 821 ; al = line (0 to 24) 822 ; ah = color attributes 823 00000719 E80B000000 call get_lpos 824 0000071E B950000000 mov ecx, 80 825 00000723 B020 mov al, 20h ; space/blank 826 00000725 F366AB rep stosw 827 00000728 C3 retn 828 829 get_lpos: ; Get line position in video buffer 830 00000729 6650 push ax 831 0000072B B4A0 mov ah, 80*2 832 0000072D F6E4 mul ah 833 0000072F 0FB7F8 movzx edi, ax 834 00000732 81C7[EC190000] add edi, video_buffer 835 00000738 6658 pop ax 836 0000073A C3 retn 837 838 rtc_p: 839 ; Print Real Time Clock content 840 ; 841 0000073B B404 mov ah, 4 ; read the date 842 0000073D CD35 int 35h ; TRDOS 386 date&time interrupt 843 ; (IBM PC/AT ROMBIOS, INT 1Ah) 844 ;mov [date_day], dl 845 ;mov [date_month], dh 846 0000073F 668915[E4190000] mov [date_day], dx 847 ;mov [date_year], cl 848 ;mov [date_century], ch 849 00000746 66890D[E6190000] mov [date_year], cx 850 ; 851 0000074D B402 mov ah, 2 ; read the time 852 0000074F CD35 int 35h ; TRDOS 386 date&time interrupt 853 00000751 8835[E8190000] mov [time_second], dh 854 ;mov [time_minute], cl 855 ;mov [time_hour], ch 856 00000757 66890D[E9190000] mov [time_minute], cx 857 ; 858 0000075E A0[E7190000] mov al, [date_century] 859 00000763 E875000000 call bcd_to_ascii 860 00000768 66A3[C2160000] mov word [datestr+6], ax 861 0000076E A0[E6190000] mov al, byte [date_year] 862 00000773 E865000000 call bcd_to_ascii 863 00000778 66A3[C4160000] mov word [datestr+8], ax 864 0000077E A0[E5190000] mov al, byte [date_month] 865 00000783 E855000000 call bcd_to_ascii 866 00000788 66A3[BF160000] mov word [datestr+3], ax 867 0000078E A0[E4190000] mov al, byte [date_day] 868 00000793 E845000000 call bcd_to_ascii 869 00000798 66A3[BC160000] mov word [datestr], ax 870 ; 871 0000079E A0[EA190000] mov al, byte [time_hour] 872 000007A3 E835000000 call bcd_to_ascii 873 000007A8 66A3[C8160000] mov word [timestr], ax 874 000007AE A0[E9190000] mov al, byte [time_minute] 875 000007B3 E825000000 call bcd_to_ascii 876 000007B8 66A3[CB160000] mov word [timestr+3], ax 877 000007BE A0[E8190000] mov al, byte [time_second] 878 000007C3 E815000000 call bcd_to_ascii 879 000007C8 66A3[CE160000] mov word [timestr+6], ax 880 ; 881 000007CE BE[AA160000] mov esi, rtc_msg ; message offset 882 ; 883 ;mov edi, video_buffer + 0A0h + 050h ; Row 1, Column 40 884 ;mov ah, [edi+1] 885 ;cmp ah, 3Fh ; cyan (3) Background 886 ; white (F) forecolor 887 ; (display disk sector frame) 888 ;jne short prtcmsg_ok 889 prtcmsg: 890 000007D3 AC lodsb 891 000007D4 08C0 or al, al 892 000007D6 7404 jz short prtcmsg_ok 893 000007D8 AA stosb 894 000007D9 47 inc edi 895 000007DA EBF7 jmp short prtcmsg 896 prtcmsg_ok: 897 000007DC C3 retn 898 899 bcd_to_ascii: 900 ; INPUT -> 901 ; AL = Packed BCD number 902 ; OUTPUT -> 903 ; AX = ASCII word/number 904 ; 905 000007DD D410 db 0D4h, 10h ; Undocumented inst. AAM 906 ; AH = AL / 10h 907 ; AL = AL MOD 10h 908 000007DF 660D3030 or ax, '00' ; Make it ASCII based 909 910 000007E3 86E0 xchg ah, al 911 912 000007E5 C3 retn 913 914 inputbox: 915 ; Show an input box for user/keyboard input 916 ; INPUT -> 917 ; ESI = input structure address 918 ; OUTPUT -> 919 ; DX = cursor position for input 920 ; input box will be displayed (on tty0) 921 ; 922 ; Modified registers: eax, ebx, ecx, edx, esi, edi 923 924 000007E6 C605[E0160000]00 mov byte [inds], 0 ; for ENTER key handling 925 000007ED 31C9 xor ecx, ecx 926 000007EF BB[EC190000] mov ebx, video_buffer 927 000007F4 B818500000 mov eax, 5018h ; 80, 24 928 000007F9 668B16 mov dx, [esi] ; box width (dl) 929 ; box height (dh) 930 000007FC 28F0 sub al, dh 931 000007FE D0E8 shr al, 1 932 00000800 A2[E3160000] mov [ibcp+1], al ; row 933 00000805 F6E4 mul ah 934 00000807 66D1E0 shl ax, 1 ; char + attribute 935 0000080A 01C3 add ebx, eax 936 0000080C B050 mov al, 80 937 0000080E 28D0 sub al, dl 938 00000810 D0E8 shr al, 1 939 00000812 A2[E2160000] mov [ibcp], al ; column 940 00000817 D0E0 shl al, 1 ; char + attribute 941 00000819 28E4 sub ah, ah 942 0000081B 01C3 add ebx, eax 943 0000081D 8A6605 mov ah, [esi+5] ; color attributes 944 00000820 B020 mov al, 20h ; space/blank 945 00000822 88F1 mov cl, dh ; height 946 ib0: 947 00000824 51 push ecx 948 00000825 88D1 mov cl, dl 949 00000827 89DF mov edi, ebx 950 00000829 F366AB rep stosw 951 0000082C 59 pop ecx 952 0000082D 81C3A0000000 add ebx, 80*2 ; number of columns * 2 953 00000833 E2EF loop ib0 954 ; 955 00000835 BF[EC190000] mov edi, video_buffer 956 0000083A A0[E3160000] mov al, [ibcp+1] ; row position 957 0000083F 024602 add al, [esi+2] ; label offset (row) 958 00000842 A2[E3160000] mov [ibcp+1], al 959 00000847 B4A0 mov ah, 80*2 960 00000849 F6E4 mul ah 961 0000084B 01C7 add edi, eax 962 0000084D A0[E2160000] mov al, [ibcp] ; column position 963 00000852 024603 add al, [esi+3] ; label offset (column) 964 00000855 A2[E2160000] mov [ibcp], al 965 0000085A 30E4 xor ah, ah 966 0000085C D0E0 shl al, 1 967 0000085E 01C7 add edi, eax 968 00000860 89F3 mov ebx, esi 969 00000862 83C606 add esi, 6 ; Label offset 970 ib2: 971 00000865 AC lodsb 972 00000866 08C0 or al, al 973 00000868 7406 jz short ib3 974 0000086A AA stosb 975 0000086B 47 inc edi 976 0000086C FEC1 inc cl 977 0000086E EBF5 jmp short ib2 978 ib3: 979 00000870 000D[E2160000] add [ibcp], cl ; column position 980 00000876 893D[D4160000] mov [current_txtpos], edi 981 ; 982 0000087C 8A4B04 mov cl, [ebx+4] ; input char count 983 0000087F 08C9 or cl, cl 984 00000881 7407 jz short ib5 ; message box (no input) 985 00000883 B020 mov al, 20h 986 00000885 B407 mov ah, 07h ; black background 987 ; light gray fore color 988 ib4: 989 00000887 F366AB rep stosw 990 ib5: 991 0000088A E874FEFFFF call video_page_update 992 0000088F 668B15[E2160000] mov dx, [ibcp] ; cursor position 993 00000896 C3 retn 994 995 hide_cursor: 996 ;CH = cursor start line (bits 0-4) 997 ; and options (bits 5-7). 998 ;CL = bottom cursor line (bits 0-4). 999 ; when bit 5 of CH is set to 0, the cursor is visible. 1000 ; when bit 5 is 1, the cursor is not visible. 1001 ; hide blinking text cursor: 1002 00000897 51 push ecx 1003 00000898 B520 mov ch, 32 1004 0000089A 30FF xor bh, bh ; video page 0 1005 0000089C EB0F jmp short hc_sc 1006 1007 show_cursor: 1008 ; dh = row 1009 ; dl = column 1010 0000089E 51 push ecx 1011 0000089F 668915[D8160000] mov [cursor_posn], dx 1012 000008A6 E8600D0000 call set_cposx 1013 ; 1014 ;show box-shaped blinking text cursor 1015 000008AB B50D mov ch, 13 1016 hc_sc: 1017 000008AD B10F mov cl, 15 1018 000008AF B401 mov ah, 1 1019 000008B1 CD31 int 31h 1020 000008B3 59 pop ecx 1021 000008B4 C3 retn 1022 1023 set_disk_parms: 1024 ; 26/08/2020 1025 000008B5 8A15[E5160000] mov dl, [drv] 1026 000008BB 80FA80 cmp dl, 80h 1027 000008BE 7210 jb short set_disk_parms_fd ; floppy 1028 000008C0 2401 and al, 1 ; LBA ready ? 1029 000008C2 7418 jz short set_disk_parms_chs 1030 set_disk_parms_lba: 1031 ; Translated FDPT 1032 000008C4 668B4309 mov ax, [ebx+9] ; physical cylinders 1033 000008C8 8A730B mov dh, [ebx+11] ; physical heads 1034 000008CB 8A4B04 mov cl, [ebx+4] ; physical sectors per track 1035 000008CE EB15 jmp short sdp0 1036 set_disk_parms_fd: 1037 ;mov al, ch ; last cylinder (bits 0-7) 1038 ;mov ah, cl ; 1039 ;shr ah, 6 ; last cylinder (bits 8-9) 1040 000008D0 6640 inc ax ; convert max. cyl number to cyl count 1041 000008D2 88E8 mov al, ch 1042 000008D4 FEC0 inc al 1043 000008D6 28E4 sub ah, ah 1044 000008D8 FEC6 inc dh ; convert last head to heads 1045 ;and cl, 63 ; sectors per track 1046 000008DA EB09 jmp short sdp0 1047 set_disk_parms_chs: 1048 ; Standard FDPT 1049 000008DC 668B03 mov ax, [ebx] ; physical cylinders 1050 000008DF 8A7302 mov dh, [ebx+2] ; physical heads 1051 000008E2 8A4B0E mov cl, [ebx+14] ; physical sectors per track 1052 sdp0: 1053 000008E5 0FB6DA movzx ebx, dl 1054 000008E8 80FB80 cmp bl, 80h 1055 000008EB 7203 jb short sdp1 1056 000008ED 80EB7E sub bl, 7Eh 1057 sdp1: 1058 000008F0 D0E3 shl bl, 1 1059 000008F2 81C3[EC160000] add ebx, drv_cylinders 1060 000008F8 668903 mov [ebx], ax 1061 000008FB 6650 push ax ; ** cylinders 1062 000008FD 81EB[EC160000] sub ebx, drv_cylinders 1063 00000903 81C3[F8160000] add ebx, drv_heads 1064 00000909 88F0 mov al, dh ; heads 1065 0000090B 30E4 xor ah, ah 1066 0000090D 668903 mov [ebx], ax 1067 00000910 81EB[F8160000] sub ebx, drv_heads 1068 00000916 81C3[04170000] add ebx, drv_spt 1069 0000091C 6683E13F and cx, 3Fh ; sectors (bits 0-6) 1070 00000920 66890B mov [ebx], cx ; sectors per track 1071 00000923 81EB[04170000] sub ebx, drv_spt 1072 00000929 66D1E3 shl bx, 1 1073 0000092C 81C3[10170000] add ebx, drv_size ; disk size (in sectors) 1074 ; LBA size = cylinders * heads * secpertrack 1075 00000932 66F7E1 mul cx 1076 00000935 6689C2 mov dx, ax ; heads*spt 1077 00000938 6658 pop ax ; ** cylinders 1078 0000093A 803D[E5160000]80 cmp byte [drv], 80h 1079 00000941 7202 jb short sdp2 1080 00000943 6648 dec ax ; 1 cylinder reserved (!?) 1081 sdp2: 1082 00000945 66F7E2 mul dx ; cylinders * (heads*spt) 1083 00000948 668903 mov [ebx], ax 1084 0000094B 66895302 mov [ebx+2], dx 1085 ; 1086 0000094F C3 retn 1087 1088 ;set_disk_parms 1089 ; movzx ebx, byte [drv] 1090 ; cmp bl, 80h 1091 ; jb short sdp0 1092 ; sub bl, 7Eh 1093 ;sdp0: 1094 ; ;add ebx, drv_status 1095 ; ;mov byte [ebx], 80h ; 'Present' flag 1096 ; ; 1097 ; mov al, ch ; last cylinder (bits 0-7) 1098 ; mov ah, cl ; 1099 ; shr ah, 6 ; last cylinder (bits 8-9) 1100 ; ;sub ebx, drv_status 1101 ; shl bl, 1 1102 ; add ebx, drv_cylinders 1103 ; inc ax ; convert max. cyl number to cyl count 1104 ; mov [ebx], ax 1105 ; push ax ; ** cylinders 1106 ; sub ebx, drv_cylinders 1107 ; add ebx, drv_heads 1108 ; mov al, dh ; last head number 1109 ; xor ah, ah 1110 ; inc ax ; heads 1111 ; mov [ebx], ax 1112 ; sub ebx, drv_heads 1113 ; add ebx, drv_spt 1114 ; and cx, 3Fh ; sectors (bits 0-6) 1115 ; mov [ebx], cx 1116 ; sub ebx, drv_spt 1117 ; shl bx, 1 1118 ; add ebx, drv_size ; disk size (in sectors) 1119 ; ; LBA size = cylinders * heads * secpertrack 1120 ; mul cx 1121 ; mov dx, ax ; heads*spt 1122 ; pop ax ; ** cylinders 1123 ; cmp byte [drv], 80h 1124 ; jb short sdp1 1125 ; dec ax ; 1 cylinder reserved (!?) 1126 ;sdp1: 1127 ; mul dx ; cylinders * (heads*spt) 1128 ; mov [ebx], ax 1129 ; mov [ebx+2], dx 1130 ; ; 1131 ; retn 1132 1133 read_disk_sector: 1134 ; EAX = sector number (LBA) 1135 ; 1136 00000950 0FB61D[9C140000] movzx ebx, byte [ds_drv] 1137 00000957 88DA mov dl, bl 1138 00000959 80FA02 cmp dl, 2 1139 0000095C 7203 jb short rd0 1140 0000095E 80C27E add dl, 7Eh ; 80h, 81h, 82h, 83h 1141 rd0: 1142 00000961 89DE mov esi, ebx 1143 00000963 8815[E5160000] mov [drv], dl 1144 00000969 81C3[E6160000] add ebx, drv_status 1145 0000096F 8A33 mov dh, [ebx] 1146 rd1: 1147 00000971 80FEF0 cmp dh, 0F0h 1148 00000974 F5 cmc 1149 00000975 7262 jc short rd_lba_fails 1150 ; 1151 00000977 89F3 mov ebx, esi 1152 00000979 C0E302 shl bl, 2 1153 0000097C 81C3[C8170000] add ebx, ds_sec 1154 00000982 8B03 mov eax, [ebx] 1155 00000984 81EB[C8170000] sub ebx, ds_sec 1156 0000098A 81C3[10170000] add ebx, drv_size 1157 00000990 3B03 cmp eax, [ebx] ; Last sector + 1 (number of secs.) 1158 00000992 F5 cmc 1159 00000993 7244 jc short rd_lba_fails 1160 ; 1161 00000995 F6C601 test dh, 1 ; LBA ready ? 1162 00000998 7440 jz short rd_chs 1163 rd_lba: 1164 ; LBA read (private function) 1165 ;((Retro UNIX 386 v1 - DISK I/O Test)) 1166 0000099A 81C6[E6160000] add esi, drv_status 1167 000009A0 80268F and byte [esi], 8Fh ; clear error bits 1168 ; 1169 000009A3 89C1 mov ecx, eax ; Logical Block/Sector Address 1170 000009A5 C1EB10 shr ebx, 16 1171 000009A8 BB[E4170000] mov ebx, sector_buffer 1172 000009AD 8A15[E5160000] mov dl, [drv] 1173 000009B3 C605[E4160000]04 mov byte [retry_count], 4 1174 rd_lba_retry: 1175 000009BA B41B mov ah, 1Bh ; LBA read (private function) 1176 000009BC B001 mov al, 1 1177 000009BE CD33 int 33h ; TRDOS 386 disk io interrupt 1178 000009C0 7317 jnc short rd_lba_ok 1179 1180 000009C2 80FC80 cmp ah, 80h ; time out ? 1181 000009C5 7411 je short rd_lba_rfails 1182 000009C7 FE0D[E4160000] dec byte [retry_count] 1183 000009CD 7409 jz short rd_lba_rfails 1184 1185 000009CF B40D mov ah, 0Dh ; Alternate reset 1186 000009D1 CD33 int 33h ; TRDOS 386 disk io interrupt 1187 000009D3 73E5 jnc short rd_lba_retry 1188 000009D5 800EF0 or byte [esi], 0F0h ; drive not ready ! 1189 rd_lba_rfails: 1190 000009D8 F9 stc 1191 rd_lba_fails: 1192 rd_lba_ok: 1193 000009D9 C3 retn 1194 ; 1195 ; CHS read (convert LBA address to CHS values) ; 1196 rd_chs: 1197 000009DA D1E6 shl esi, 1 1198 000009DC 89F3 mov ebx, esi 1199 000009DE 31D2 xor edx, edx ; 0 1200 000009E0 29C9 sub ecx, ecx 1201 000009E2 81C3[04170000] add ebx, drv_spt 1202 000009E8 668B0B mov cx, [ebx] ; sector per track 1203 ; EAX = sector address (LBA) 1204 000009EB F7F1 div ecx 1205 000009ED 88D1 mov cl, dl ; sector number - 1 1206 000009EF FEC1 inc cl ; sector number (1 based) 1207 000009F1 6651 push cx 1208 000009F3 89F3 mov ebx, esi 1209 000009F5 81C3[F8160000] add ebx, drv_heads 1210 000009FB 668B0B mov cx, [ebx] ; heads 1211 000009FE 31D2 xor edx, edx 1212 ; EAX = cylinders * heads + head 1213 00000A00 F7F1 div ecx 1214 00000A02 6659 pop cx ; sector number 1215 00000A04 88D6 mov dh, dl ; head number 1216 00000A06 8A15[E5160000] mov dl, [drv] 1217 00000A0C 88C5 mov ch, al ; cylinder (bits 0-7) 1218 00000A0E C0E406 shl ah, 6 1219 00000A11 08E1 or cl, ah ; cylinder (bits 8-9) 1220 ; sector (bits 0-7) 1221 00000A13 BB[E4170000] mov ebx, sector_buffer 1222 ; CL = sector (bits 0-6) 1223 ; cylinder (bits 7-8 -> bits 8-9) 1224 ; CH = cylinder (bits 0-7) 1225 ; DH = head 1226 ; DL = drive 1227 1228 00000A18 D1EE shr esi, 1 ; drive index (byte alignment) 1229 00000A1A 81C6[E6160000] add esi, drv_status 1230 00000A20 80268F and byte [esi], 8Fh ; clear error bits 1231 ; 1232 00000A23 C605[E4160000]04 mov byte [retry_count], 4 1233 rd_retry: 1234 00000A2A B402 mov ah, 02h ; read sectors 1235 00000A2C B001 mov al, 1 ; sector count 1236 00000A2E CD33 int 33h ; TRDOS 386 disk io interrupt 1237 00000A30 7320 jnc short rd_ok 1238 00000A32 80FC80 cmp ah, 80h ; time out ? 1239 00000A35 7408 je short rd_rfails 1240 00000A37 FE0D[E4160000] dec byte [retry_count] 1241 00000A3D 7502 jnz short rd_reset 1242 rd_rfails: 1243 00000A3F F9 stc 1244 rd_fails: 1245 00000A40 C3 retn 1246 rd_reset: 1247 00000A41 28E4 sub ah, ah 1248 00000A43 80FA80 cmp dl, 80h 1249 00000A46 7202 jb short rd_fd_reset 1250 00000A48 B40D mov ah, 0Dh ; Alternate reset 1251 rd_fd_reset: 1252 00000A4A CD33 int 33h ; TRDOS 386 disk io interrupt 1253 00000A4C 73DC jnc short rd_retry 1254 00000A4E 800EF0 or byte [esi], 0F0h ; drive not ready ! 1255 00000A51 F9 stc 1256 rd_ok: 1257 00000A52 C3 retn 1258 1259 clear_screen: 1260 00000A53 BF[EC190000] mov edi, video_buffer 1261 00000A58 B9D0070000 mov ecx, 80*25 1262 00000A5D 66B82007 mov ax, 0720h ; light gray char space (blank) 1263 00000A61 F366AB rep stosw 1264 1265 00000A64 E89AFCFFFF call video_page_update 1266 1267 00000A69 6631D2 xor dx, dx ; column 0, row 0 1268 00000A6C E99A0B0000 jmp set_cposx ; set cursor position 1269 1270 rfdp_err: 1271 00000A71 E8DDFFFFFF call clear_screen 1272 00000A76 BE[91160000] mov esi, drv_not_ready 1273 00000A7B E919030000 jmp print_msg 1274 1275 dskprm: 1276 ; DISPLAY DISK PARAMETERS TABLE 1277 ; 1278 ; INPUT -> DL = Disk/Drive # 1279 ; 1280 00000A80 8815[E5160000] mov byte [drv], dl ; 0,1,80h,81h,82h,83h 1281 ; 1282 00000A86 F6C280 test dl, 80h 1283 00000A89 7403 jz short dskprm0 1284 00000A8B 80EA7E sub dl, 7Eh ; hd0 = 2 1285 dskprm0: 1286 00000A8E 0FB6DA movzx ebx, dl 1287 00000A91 81C3[E6160000] add ebx, drv_status 1288 1289 00000A97 803B80 cmp byte [ebx], 80h ; existing ? 1290 00000A9A 72D5 jb short rfdp_err 1291 ; 1292 00000A9C E8B2FFFFFF call clear_screen ; clear video page 0 1293 ; 1294 00000AA1 8A1D[E5160000] mov bl, [drv] 1295 00000AA7 F6C380 test bl, 80h 1296 00000AAA 0F85F7000000 jnz print_hdpt 1297 1298 00000AB0 0FB6F3 movzx esi, bl 1299 00000AB3 80C330 add bl, 30h ; '0' 1300 00000AB6 881D[B50D0000] mov byte [flpdnum], bl 1301 00000ABC 81C6[A8160000] add esi, fd0_type 1302 00000AC2 8A06 mov al, [esi] 1303 00000AC4 A2[EC0D0000] mov byte [flpdtype], al 1304 ; floppy disk drive type 1305 ; (1=360K, 2=1.2M, 3=720K, 4=1.44M) 1306 print_flpdpt: 1307 ; Writing the Diskette Parameter Table on screen 1308 00000AC9 C0E304 shl bl, 4 ; * 16 1309 00000ACC 0FB6F3 movzx esi, bl 1310 00000ACF 81C6[28170000] add esi, fd0_dpt 1311 00000AD5 AC lodsb ; bits 0-3: SRT step rate time 1312 ; bits 4-7: head unload time 1313 00000AD6 BF[360E0000] mov edi, rSrtHdUnld 1314 00000ADB E8AC000000 call write_hex 1315 00000AE0 AC lodsb ; bit 0: 1=use DMA 1316 ; bits 2-7: head load time 1317 00000AE1 BF[7E0E0000] mov edi, rDmaHdLd 1318 00000AE6 E8A1000000 call write_hex 1319 00000AEB AC lodsb ; 55-ms increments 1320 ; before turning disk motor off 1321 00000AEC BF[C50E0000] mov edi, bMotorOff 1322 00000AF1 E896000000 call write_hex 1323 00000AF6 AC lodsb ; sector size 1324 ; (0=128, 1=256, 2=512, 3=1024) 1325 00000AF7 BF[0A0F0000] mov edi, bSectSize 1326 00000AFC E88B000000 call write_hex 1327 00000B01 AC lodsb ; EOT (last sector on a track) 1328 00000B02 BF[360F0000] mov edi, bLastTrack 1329 00000B07 E880000000 call write_hex 1330 00000B0C AC lodsb ; gap length 1331 ; for read/write operations 1332 00000B0D BF[520F0000] mov edi, bGapLen 1333 00000B12 E875000000 call write_hex 1334 00000B17 AC lodsb ; DTL (Data Transfer Length) 1335 ; max transfer when length not set 1336 00000B18 BF[6E0F0000] mov edi, bDTL 1337 00000B1D E86A000000 call write_hex 1338 00000B22 AC lodsb ; gap length for format operation 1339 00000B23 BF[8A0F0000] mov edi, bGapFmt 1340 00000B28 E85F000000 call write_hex 1341 00000B2D AC lodsb ; fill character for format 1342 ; (normally F6H) 1343 00000B2E BF[A60F0000] mov edi, bFillChar 1344 00000B33 E854000000 call write_hex 1345 00000B38 AC lodsb ; head-settle time 1346 ; (in milliseconds) 1347 00000B39 BF[D10F0000] mov edi, bHdSettle 1348 00000B3E E849000000 call write_hex 1349 00000B43 AC lodsb ; motor-startup time 1350 ; (in 1/8th-second intervals) 1351 00000B44 BF[FA0F0000] mov edi, bMotorOn 1352 00000B49 E83E000000 call write_hex 1353 ; 1354 ; (extension, not in original bios function) 1355 00000B4E AC lodsb ; Max. track number 1356 00000B4F BF[34100000] mov edi, bMaxTrack 1357 00000B54 E833000000 call write_hex 1358 00000B59 AC lodsb ; Data transfer rate 1359 00000B5A BF[50100000] mov edi, bDataRate 1360 00000B5F E828000000 call write_hex 1361 ; 1362 00000B64 A0[E5160000] mov al, [drv] 1363 00000B69 0430 add al, 30h ; '0' 1364 00000B6B A2[B50D0000] mov byte [flpdnum], al 1365 00000B70 BE[AD0D0000] mov esi, FLPDPT 1366 00000B75 E81F020000 call print_msg 1367 00000B7A C3 retn 1368 1369 write_dhex: 1370 00000B7B 88E3 mov bl, ah 1371 00000B7D C0EB04 shr bl, 4 1372 00000B80 E813000000 call dhgd 1373 00000B85 88E3 mov bl, ah 1374 00000B87 E80C000000 call dhgd 1375 1376 write_hex: 1377 00000B8C 88C3 mov bl, al 1378 00000B8E C0EB04 shr bl, 4 1379 00000B91 E802000000 call dhgd 1380 00000B96 88C3 mov bl, al 1381 ;call dhgd 1382 ;retn 1383 dhgd: 1384 00000B98 50 push eax 1385 00000B99 83E30F and ebx, 0Fh 1386 00000B9C 81C3[8C140000] add ebx, hex_digits 1387 00000BA2 8A03 mov al, [ebx] 1388 00000BA4 AA stosb 1389 00000BA5 58 pop eax 1390 00000BA6 C3 retn 1391 1392 print_hdpt: 1393 ;mov bl, [drv] 1394 00000BA7 80E303 and bl, 3 1395 00000BAA 88D8 mov al, bl 1396 00000BAC 0402 add al, 2 1397 00000BAE A2[E5160000] mov [drv], al 1398 ; 1399 00000BB3 C0E305 shl bl, 5 ; * 32 1400 00000BB6 0FB6F3 movzx esi, bl 1401 00000BB9 81C6[48170000] add esi, hd0_dpt 1402 ; 1403 00000BBF 807E03A0 cmp byte [esi+3], 0A0h ; Translated table 1404 00000BC3 0F84EB000000 je print_thdpt ; indicator 1405 ; 1406 ; Writing Fixed Disk Parameter Table on screen 1407 00000BC9 66AD lodsw ; Number of Cylinders 1408 00000BCB BF[C3100000] mov edi, cylnum 1409 00000BD0 E8A6FFFFFF call write_dhex 1410 00000BD5 AC lodsb ; Number of Heads 1411 00000BD6 BF[E0100000] mov edi, headnum 1412 00000BDB E8ACFFFFFF call write_hex 1413 00000BE0 AC lodsb ; Reserved 1414 00000BE1 BF[FB100000] mov edi, rsvd3 1415 00000BE6 E8A1FFFFFF call write_hex 1416 00000BEB AC lodsb ; Reserved 1417 00000BEC BF[16110000] mov edi, rsvd4 1418 00000BF1 E896FFFFFF call write_hex 1419 00000BF6 66AD lodsw ; Precompensation (Obsolete) 1420 00000BF8 BF[31110000] mov edi, pcompnum 1421 00000BFD E879FFFFFF call write_dhex 1422 00000C02 AC lodsb ; Reserved 1423 00000C03 BF[4E110000] mov edi, rsvd7 1424 00000C08 E87FFFFFFF call write_hex 1425 00000C0D AC lodsb ; Drive Control Byte 1426 00000C0E BF[69110000] mov edi, dcbnum 1427 00000C13 E874FFFFFF call write_hex 1428 00000C18 66AD lodsw ; Reserved 1429 00000C1A BF[84110000] mov edi, rsvd9 1430 00000C1F E857FFFFFF call write_dhex 1431 00000C24 AC lodsb ; Reserved 1432 00000C25 BF[A1110000] mov edi, rsvd11 1433 00000C2A E85DFFFFFF call write_hex 1434 00000C2F 66AD lodsw ; Landing Zone (Obsolete) 1435 00000C31 BF[BC110000] mov edi, lzonenum 1436 00000C36 E840FFFFFF call write_dhex 1437 00000C3B AC lodsb ; Sectors per Track 1438 00000C3C BF[D9110000] mov edi, psptnum 1439 00000C41 E846FFFFFF call write_hex 1440 00000C46 AC lodsb ; Reserved 1441 00000C47 BF[F4110000] mov edi, rsvd15 1442 00000C4C E83BFFFFFF call write_hex 1443 ; 1444 ; (extension, not in original bios function) 1445 00000C51 66AD lodsw ; I/O Port Base Address 1446 00000C53 BF[11120000] mov edi, bPortAddr 1447 00000C58 E81EFFFFFF call write_dhex 1448 ; 06/01/2015 1449 00000C5D 66AD lodsw ; Control Port Address 1450 00000C5F BF[2E120000] mov edi, cPortAddr 1451 00000C64 E812FFFFFF call write_dhex 1452 00000C69 AC lodsb ; Head Register Upper Nibble 1453 00000C6A BF[4B120000] mov edi, hregupnib 1454 00000C6F E818FFFFFF call write_hex 1455 ; 1456 00000C74 A0[E5160000] mov al, [drv] 1457 00000C79 88C3 mov bl, al 1458 00000C7B 0430 add al, '0' 1459 00000C7D A2[8B100000] mov [dsknum], al 1460 ; 1461 00000C82 C0E302 shl bl, 2 1462 00000C85 0FB6F3 movzx esi, bl 1463 00000C88 81C6[10170000] add esi, drv_size 1464 00000C8E 668B4602 mov ax, [esi+2] 1465 00000C92 BF[68120000] mov edi, disksize 1466 00000C97 E8DFFEFFFF call write_dhex 1467 00000C9C 668B06 mov ax, [esi] 1468 00000C9F BF[6C120000] mov edi, disksize+4 1469 00000CA4 E8D2FEFFFF call write_dhex 1470 ; 1471 00000CA9 BE[83100000] mov esi, HDPT 1472 00000CAE E8E6000000 call print_msg 1473 00000CB3 C3 retn 1474 1475 print_thdpt: 1476 ; Writing the Translated FDPT on screen 1477 ; (PHOENIX - EDD specification v1.1) 1478 00000CB4 66AD lodsw ; Logical Numbers of Cylinders, Limit 1024 1479 00000CB6 BF[C1120000] mov edi, lcylnum 1480 00000CBB E8BBFEFFFF call write_dhex 1481 00000CC0 AC lodsb ; Logical Numbers of Heads, Limit 256 1482 00000CC1 BF[DE120000] mov edi, lheadnum 1483 00000CC6 E8C1FEFFFF call write_hex 1484 00000CCB AC lodsb ; A0h signature, indicates translated table 1485 00000CCC BF[F9120000] mov edi, tsignum 1486 00000CD1 E8B6FEFFFF call write_hex 1487 00000CD6 AC lodsb ; Physical Sectors per Track 1488 00000CD7 BF[14130000] mov edi, tpsptnum 1489 00000CDC E8ABFEFFFF call write_hex 1490 00000CE1 66AD lodsw ; Precompensation (Obsolete) 1491 00000CE3 BF[2F130000] mov edi, tpcompnum 1492 00000CE8 E88EFEFFFF call write_dhex 1493 00000CED AC lodsb ; Reserved 1494 00000CEE BF[58130000] mov edi, trsvd7 1495 00000CF3 E894FEFFFF call write_hex 1496 00000CF8 AC lodsb ; Drive Control Byte 1497 00000CF9 BF[73130000] mov edi, tdcbnum 1498 00000CFE E889FEFFFF call write_hex 1499 00000D03 66AD lodsw ; Physical Cylinders, limit 65536 1500 00000D05 BF[8E130000] mov edi, tpcylnum 1501 00000D0A E86CFEFFFF call write_dhex 1502 00000D0F AC lodsb ; Physical Heads, limit 16 1503 00000D10 BF[AB130000] mov edi, tpheadnum 1504 00000D15 E872FEFFFF call write_hex 1505 00000D1A 66AD lodsw ; Landing Zone (Obsolete) 1506 00000D1C BF[C6130000] mov edi, tlzonenum 1507 00000D21 E855FEFFFF call write_dhex 1508 00000D26 AC lodsb ; Logical Sectors per Track, Limit 63 1509 00000D27 BF[EF130000] mov edi, lsptnum 1510 00000D2C E85BFEFFFF call write_hex 1511 00000D31 AC lodsb ; Checksum for translated FDPT 1512 00000D32 BF[0A140000] mov edi, checksum 1513 00000D37 E850FEFFFF call write_hex 1514 ; 1515 ; (extension, not in original bios function) 1516 00000D3C 66AD lodsw ; I/O Port Base Address 1517 00000D3E BF[27140000] mov edi, tbPortAddr 1518 00000D43 E833FEFFFF call write_dhex 1519 ; 06/01/2015 1520 00000D48 66AD lodsw ; Control Port Address 1521 00000D4A BF[44140000] mov edi, tcPortAddr 1522 00000D4F E827FEFFFF call write_dhex 1523 00000D54 AC lodsb ; Head Register Upper Nibble 1524 00000D55 BF[61140000] mov edi, thregupnib 1525 00000D5A E82DFEFFFF call write_hex 1526 ; 1527 00000D5F A0[E5160000] mov al, [drv] 1528 00000D64 88C3 mov bl, al 1529 00000D66 0430 add al, '0' 1530 00000D68 A2[7E120000] mov [tdsknum], al 1531 ; 1532 00000D6D C0E302 shl bl, 2 1533 00000D70 0FB6F3 movzx esi, bl 1534 00000D73 81C6[10170000] add esi, drv_size 1535 00000D79 668B4602 mov ax, [esi+2] 1536 00000D7D BF[7E140000] mov edi, tdisksize 1537 00000D82 E8F4FDFFFF call write_dhex 1538 00000D87 668B06 mov ax, [esi] 1539 00000D8A BF[82140000] mov edi, tdisksize+4 1540 00000D8F E8E7FDFFFF call write_dhex 1541 ; 1542 00000D94 BE[76120000] mov esi, THDPT 1543 ;call print_msg 1544 ;retn 1545 1546 print_msg: 1547 00000D99 66BB0700 mov bx, 7 1548 00000D9D B40E mov ah, 0Eh 1549 pmsg_loop: 1550 00000D9F AC lodsb 1551 00000DA0 20C0 and al, al 1552 00000DA2 7404 jz short pmsg_ok 1553 00000DA4 CD31 int 31h ; TRDOS 386 video interrupt 1554 00000DA6 EBF7 jmp short pmsg_loop 1555 pmsg_ok: 1556 00000DA8 B410 mov ah, 10h ; Getchar 1557 00000DAA CD32 int 32h ; TRDOS 386 keyboard interrupt 1558 00000DAC C3 retn 1559 ; 1560 FLPDPT: 1561 00000DAD 07 db 07h 1562 00000DAE 0D0A db 0Dh, 0Ah 1563 00000DB0 4469736B20 db 'Disk ' 1564 flpdnum: 1565 00000DB5 58202D20 db 'X - ' 1566 00000DB9 4449534B4554544520- db 'DISKETTE PARAMETER TABLE' 1566 00000DC2 504152414D45544552- 1566 00000DCB 205441424C45 1567 00000DD1 0D0A0D0A db 0Dh, 0Ah, 0DH, 0Ah 1568 00000DD5 547970652020202020- db 'Type : ' 1568 00000DDE 202020202020202020- 1568 00000DE7 2020203A20 1569 flpdtype: 1570 00000DEC 58202020 db 'X ' 1571 00000DF0 5B2031203D20333630- db '[ 1 = 360K, 2 = 1.2M, 3 = 720K, 4 = 1.44M ]' 1571 00000DF9 4B2C2032203D20312E- 1571 00000E02 324D2C2033203D2037- 1571 00000E0B 32304B2C2034203D20- 1571 00000E14 312E34344D205D 1572 00000E1B 0D0A0D0A db 0Dh, 0Ah, 0DH, 0Ah 1573 00000E1F 535254202D20486561- db 'SRT - Head Unld Time : ' 1573 00000E28 6420556E6C64205469- 1573 00000E31 6D65203A20 1574 rSrtHdUnld: 1575 00000E36 585868202862697473- db 'XXh (bits 0-3: SRT, bits 4-7: head unload time)' 1575 00000E3F 20302D333A20535254- 1575 00000E48 2C206269747320342D- 1575 00000E51 373A20686561642075- 1575 00000E5A 6E6C6F61642074696D- 1575 00000E63 6529 1576 00000E65 0D0A db 0Dh, 0Ah 1577 00000E67 444D41202D20486561- db 'DMA - Head Load Time : ' 1577 00000E70 64204C6F6164205469- 1577 00000E79 6D65203A20 1578 rDmaHdLd: 1579 00000E7E 585868202862697420- db 'XXh (bit 0: 1 = DMA, bits 2-7: head load time)' 1579 00000E87 303A2031203D20444D- 1579 00000E90 412C20626974732032- 1579 00000E99 2D373A206865616420- 1579 00000EA2 6C6F61642074696D65- 1579 00000EAB 29 1580 00000EAC 0D0A db 0Dh, 0Ah 1581 00000EAE 4D6F746F72204F6666- db 'Motor Off Count : ' 1581 00000EB7 20436F756E74202020- 1581 00000EC0 2020203A20 1582 bMotorOff: 1583 00000EC5 585868202877697468- db 'XXh (with 55ms icrements before turning off)' 1583 00000ECE 2035356D7320696372- 1583 00000ED7 656D656E7473206265- 1583 00000EE0 666F7265207475726E- 1583 00000EE9 696E67206F666629 1584 00000EF1 0D0A db 0Dh, 0Ah 1585 00000EF3 536563746F72205369- db 'Sector Size : ' 1585 00000EFC 7A6520202020202020- 1585 00000F05 2020203A20 1586 bSectSize: 1587 00000F0A 585868202832203D20- db 'XXh (2 = 512 bytes)' 1587 00000F13 353132206279746573- 1587 00000F1C 29 1588 00000F1D 0D0A db 0Dh, 0Ah 1589 00000F1F 4C6173742053656374- db 'Last Sect on a Track : ' 1589 00000F28 206F6E206120547261- 1589 00000F31 636B203A20 1590 bLastTrack: 1591 00000F36 585868 db 'XXh' 1592 00000F39 0D0A db 0Dh, 0Ah 1593 00000F3B 476170204C656E6774- db 'Gap Length (R/W) : ' 1593 00000F44 68202028522F572920- 1593 00000F4D 2020203A20 1594 bGapLen: 1595 00000F52 585868 db 'XXh' 1596 00000F55 0D0A db 0Dh, 0Ah 1597 00000F57 44617461205472616E- db 'Data Transfer Length : ' 1597 00000F60 73666572204C656E67- 1597 00000F69 7468203A20 1598 bDTL: 1599 00000F6E 585868 db 'XXh' 1600 00000F71 0D0A db 0Dh, 0Ah 1601 00000F73 476170204C656E6774- db 'Gap Length (Format) : ' 1601 00000F7C 682028466F726D6174- 1601 00000F85 2920203A20 1602 bGapFmt: 1603 00000F8A 585868 db 'XXh' 1604 00000F8D 0D0A db 0Dh, 0Ah 1605 00000F8F 46696C6C2043686172- db 'Fill Char for format : ' 1605 00000F98 20666F7220666F726D- 1605 00000FA1 6174203A20 1606 bFillChar: 1607 00000FA6 58586820286E6F726D- db 'XXh (normally F6h)' 1607 00000FAF 616C6C792046366829 1608 00000FB8 0D0A db 0Dh, 0Ah 1609 00000FBA 486561642053657474- db 'Head Settle Time : ' 1609 00000FC3 6C652054696D652020- 1609 00000FCC 2020203A20 1610 bHdSettle: 1611 00000FD1 585868206D696C6C69- db 'XXh milliseconds' 1611 00000FDA 7365636F6E6473 1612 00000FE1 0D0A db 0Dh, 0Ah 1613 00000FE3 4D6F746F7220537461- db 'Motor Startup Time : ' 1613 00000FEC 727475702054696D65- 1613 00000FF5 2020203A20 1614 bMotorOn: 1615 00000FFA 5858682028696E2031- db 'XXh (in 1/8th second intervals)' 1615 00001003 2F387468207365636F- 1615 0000100C 6E6420696E74657276- 1615 00001015 616C7329 1616 00001019 0D0A db 0Dh, 0Ah 1617 ; 19/12/2014 1618 0000101B 0D0A db 0Dh, 0Ah 1619 0000101D 4D6178696D756D2054- db 'Maximum Track Number : ' 1619 00001026 7261636B204E756D62- 1619 0000102F 6572203A20 1620 bMaxTrack: 1621 00001034 585868 db 'XXh' 1622 00001037 0D0A db 0Dh, 0Ah 1623 00001039 44617461205472616E- db 'Data Transfer Rate : ' 1623 00001042 736665722052617465- 1623 0000104B 2020203A20 1624 bDataRate: 1625 00001050 585868202830306820- db 'XXh (00h = 500KBS, 40h = 300KBS, 80H = 250KBS)' 1625 00001059 3D203530304B42532C- 1625 00001062 20343068203D203330- 1625 0000106B 304B42532C20383048- 1625 00001074 203D203235304B4253- 1625 0000107D 29 1626 0000107E 0D0A db 0Dh, 0Ah 1627 00001080 0D0A00 db 0Dh, 0Ah, 0 1628 1629 HDPT: 1630 00001083 07 db 07h 1631 00001084 0D0A db 0Dh, 0Ah 1632 00001086 4469736B20 db 'Disk ' 1633 dsknum: 1634 0000108B 58202D20 db 'X - ' 1635 0000108F 464958454420444953- db 'FIXED DISK PARAMETER TABLE' 1635 00001098 4B20504152414D4554- 1635 000010A1 4552205441424C45 1636 000010A9 0D0A0D0A db 0Dh, 0Ah, 0DH, 0Ah 1637 000010AD 4E756D626572206F66- db 'Number of Cylinders : ' 1637 000010B6 2043796C696E646572- 1637 000010BF 73203A20 1638 cylnum: 1639 000010C3 5858585868 db 'XXXXh' 1640 000010C8 0D0A db 0Dh, 0Ah 1641 000010CA 4E756D626572206F66- db 'Number of Heads : ' 1641 000010D3 204865616473202020- 1641 000010DC 20203A20 1642 headnum: 1643 000010E0 585868 db 'XXh' 1644 000010E3 0D0A db 0Dh, 0Ah 1645 000010E5 526573657276656420- db 'Reserved : ' 1645 000010EE 202020202020202020- 1645 000010F7 20203A20 1646 rsvd3: 1647 000010FB 585868 db 'XXh' 1648 000010FE 0D0A db 0Dh, 0Ah 1649 00001100 526573657276656420- db 'Reserved : ' 1649 00001109 202020202020202020- 1649 00001112 20203A20 1650 rsvd4: 1651 00001116 585868 db 'XXh' 1652 00001119 0D0A db 0Dh, 0Ah 1653 0000111B 507265636F6D70656E- db 'Precompensation : ' 1653 00001124 736174696F6E202020- 1653 0000112D 20203A20 1654 pcompnum: 1655 00001131 5858585868 db 'XXXXh' 1656 00001136 0D0A db 0Dh, 0Ah 1657 00001138 526573657276656420- db 'Reserved : ' 1657 00001141 202020202020202020- 1657 0000114A 20203A20 1658 rsvd7: 1659 0000114E 585868 db 'XXh' 1660 00001151 0D0A db 0Dh, 0Ah 1661 00001153 447269766520436F6E- db 'Drive Control Byte : ' 1661 0000115C 74726F6C2042797465- 1661 00001165 20203A20 1662 dcbnum: 1663 00001169 585868 db 'XXh' 1664 0000116C 0D0A db 0Dh, 0Ah 1665 0000116E 526573657276656420- db 'Reserved : ' 1665 00001177 202020202020202020- 1665 00001180 20203A20 1666 rsvd9: 1667 00001184 5858585868 db 'XXXXh' 1668 00001189 0D0A db 0Dh, 0Ah 1669 0000118B 526573657276656420- db 'Reserved : ' 1669 00001194 202020202020202020- 1669 0000119D 20203A20 1670 rsvd11: 1671 000011A1 585868 db 'XXh' 1672 000011A4 0D0A db 0Dh, 0Ah 1673 000011A6 4C616E64696E67205A- db 'Landing Zone : ' 1673 000011AF 6F6E65202020202020- 1673 000011B8 20203A20 1674 lzonenum: 1675 000011BC 5858585868 db 'XXXXh' 1676 000011C1 0D0A db 0Dh, 0Ah 1677 000011C3 536563746F72732070- db 'Sectors per Track : ' 1677 000011CC 657220547261636B20- 1677 000011D5 20203A20 1678 psptnum: 1679 000011D9 585868 db 'XXh' 1680 000011DC 0D0A db 0Dh, 0Ah 1681 000011DE 526573657276656420- db 'Reserved : ' 1681 000011E7 202020202020202020- 1681 000011F0 20203A20 1682 rsvd15: 1683 000011F4 585868 db 'XXh' 1684 000011F7 0D0A db 0Dh, 0Ah 1685 000011F9 0D0A db 0Dh, 0Ah 1686 000011FB 492F4F20506F727420- db 'I/O Port Base Addr : ' 1686 00001204 426173652041646472- 1686 0000120D 20203A20 1687 bPortAddr: 1688 00001211 5858585868 db 'XXXXh' 1689 00001216 0D0A db 0Dh, 0Ah 1690 00001218 436F6E74726F6C2050- db 'Control Port Addr : ' 1690 00001221 6F7274204164647220- 1690 0000122A 20203A20 1691 cPortAddr: 1692 0000122E 5858585868 db 'XXXXh' 1693 00001233 0D0A db 0Dh, 0Ah 1694 00001235 486561642052656720- db 'Head Reg Upp Nibb : ' 1694 0000123E 557070204E69626220- 1694 00001247 20203A20 1695 hregupnib: 1696 0000124B 585868 db 'XXh' 1697 0000124E 0D0A db 0Dh, 0Ah 1698 00001250 0D0A db 0Dh, 0Ah 1699 00001252 53697A652028696E20- db 'Size (in sectors) : ' 1699 0000125B 736563746F72732920- 1699 00001264 20203A20 1700 disksize: 1701 00001268 585858585858585868 db 'XXXXXXXXh' 1702 00001271 0D0A db 0Dh, 0Ah 1703 00001273 0D0A00 db 0Dh, 0Ah, 0 1704 1705 THDPT: 1706 00001276 07 db 07h 1707 00001277 0D0A db 0Dh, 0Ah 1708 00001279 4469736B20 db 'Disk ' 1709 tdsknum: 1710 0000127E 58202D20 db 'X - ' 1711 00001282 5452414E534C415445- db 'TRANSLATED FIXED DISK PARAMETER TABLE' 1711 0000128B 442046495845442044- 1711 00001294 49534B20504152414D- 1711 0000129D 45544552205441424C- 1711 000012A6 45 1712 000012A7 0D0A0D0A db 0Dh, 0Ah, 0DH, 0Ah 1713 000012AB 4C6F676963616C2043- db 'Logical Cylinders : ' 1713 000012B4 796C696E6465727320- 1713 000012BD 20203A20 1714 lcylnum: 1715 000012C1 5858585868 db 'XXXXh' 1716 000012C6 0D0A db 0Dh, 0Ah 1717 000012C8 4C6F676963616C2048- db 'Logical Heads : ' 1717 000012D1 656164732020202020- 1717 000012DA 20203A20 1718 lheadnum: 1719 000012DE 585868 db 'XXh' 1720 000012E1 0D0A db 0Dh, 0Ah 1721 000012E3 5369676E6174757265- db 'Signature : ' 1721 000012EC 202020202020202020- 1721 000012F5 20203A20 1722 tsignum: 1723 000012F9 585868 db 'XXh' 1724 000012FC 0D0A db 0Dh, 0Ah 1725 000012FE 506879205365632070- db 'Phy Sec per Track : ' 1725 00001307 657220547261636B20- 1725 00001310 20203A20 1726 tpsptnum: 1727 00001314 585868 db 'XXh' 1728 00001317 0D0A db 0Dh, 0Ah 1729 00001319 507265636F6D70656E- db 'Precompensation : ' 1729 00001322 736174696F6E202020- 1729 0000132B 20203A20 1730 tpcompnum: 1731 0000132F 58585858682020284F- db 'XXXXh (Obsolete)' 1731 00001338 62736F6C65746529 1732 00001340 0D0A db 0Dh, 0Ah 1733 00001342 526573657276656420- db 'Reserved : ' 1733 0000134B 202020202020202020- 1733 00001354 20203A20 1734 trsvd7: 1735 00001358 585868 db 'XXh' 1736 0000135B 0D0A db 0Dh, 0Ah 1737 0000135D 447269766520436F6E- db 'Drive Control Byte : ' 1737 00001366 74726F6C2042797465- 1737 0000136F 20203A20 1738 tdcbnum: 1739 00001373 585868 db 'XXh' 1740 00001376 0D0A db 0Dh, 0Ah 1741 00001378 506879736963616C20- db 'Physical Cylinders : ' 1741 00001381 43796C696E64657273- 1741 0000138A 20203A20 1742 tpcylnum: 1743 0000138E 5858585868 db 'XXXXh' 1744 00001393 0D0A db 0Dh, 0Ah 1745 00001395 506879736963616C20- db 'Physical Heads : ' 1745 0000139E 486561647320202020- 1745 000013A7 20203A20 1746 tpheadnum: 1747 000013AB 585868 db 'XXh' 1748 000013AE 0D0A db 0Dh, 0Ah 1749 000013B0 4C616E64696E67205A- db 'Landing Zone : ' 1749 000013B9 6F6E65202020202020- 1749 000013C2 20203A20 1750 tlzonenum: 1751 000013C6 58585858682020284F- db 'XXXXh (Obsolete)' 1751 000013CF 62736F6C65746529 1752 000013D7 0D0A db 0Dh, 0Ah 1753 000013D9 4C6F67696320536563- db 'Logic Sec per Trk : ' 1753 000013E2 207065722054726B20- 1753 000013EB 20203A20 1754 lsptnum: 1755 000013EF 585868 db 'XXh' 1756 000013F2 0D0A db 0Dh, 0Ah 1757 000013F4 436865636B73756D20- db 'Checksum : ' 1757 000013FD 202020202020202020- 1757 00001406 20203A20 1758 checksum: 1759 0000140A 585868 db 'XXh' 1760 0000140D 0D0A db 0Dh, 0Ah 1761 0000140F 0D0A db 0Dh, 0Ah 1762 00001411 492F4F20506F727420- db 'I/O Port Base Addr : ' 1762 0000141A 426173652041646472- 1762 00001423 20203A20 1763 tbPortAddr: 1764 00001427 5858585868 db 'XXXXh' 1765 0000142C 0D0A db 0Dh, 0Ah 1766 0000142E 436F6E74726F6C2050- db 'Control Port Addr : ' 1766 00001437 6F7274204164647220- 1766 00001440 20203A20 1767 tcPortAddr: 1768 00001444 5858585868 db 'XXXXh' 1769 00001449 0D0A db 0Dh, 0Ah 1770 0000144B 486561642052656720- db 'Head Reg Upp Nibb : ' 1770 00001454 557070204E69626220- 1770 0000145D 20203A20 1771 thregupnib: 1772 00001461 585868 db 'XXh' 1773 00001464 0D0A db 0Dh, 0Ah 1774 00001466 0D0A db 0Dh, 0Ah 1775 00001468 53697A652028696E20- db 'Size (in sectors) : ' 1775 00001471 736563746F72732920- 1775 0000147A 20203A20 1776 tdisksize: 1777 0000147E 585858585858585868 db 'XXXXXXXXh' 1778 00001487 0D0A db 0Dh, 0Ah 1779 00001489 0D0A00 db 0Dh, 0Ah, 0 1780 1781 hex_digits: 1782 hexchrs: 1783 0000148C 303132333435363738- db '0123456789ABCDEF' 1783 00001495 39414243444546 1784 1785 ds_drv: 1786 0000149C FF db 0FFh ; Current drive (on display) 1787 0000149D 00 db 0 ; Current half (0 or >0) 1788 1789 drv_names: 1790 0000149E 666430206664312068- db 'fd0 fd1 hd0 hd1 hd2 hd3 ' 1790 000014A7 643020686431206864- 1790 000014B0 322068643320 1791 1792 dpheader: 1793 000014B6 204472697665203A20 db ' Drive : ' 1794 drv_name: 1795 000014BF 3030302020 db '000 ' 1796 000014C4 536563746F72203A20 db 'Sector : ' 1797 sector_num: 1798 000014CD 464646464646464668 db 'FFFFFFFFh' 1799 000014D6 00 db 0 1800 1801 sdline: 1802 000014D7 204279746520 db ' Byte ' 1803 sdline_1: 1804 000014DD 30303068 db '000h' 1805 000014E1 202D2020 db ' - ' 1806 sdline_2: 1807 000014E5 303020303020303020- db '00 00 00 00 00 00 00 00 ' 1807 000014EE 303020303020303020- 1807 000014F7 303020303020 1808 000014FD 303020303020303020- db '00 00 00 00 00 00 00 00 ' 1808 00001506 303020303020303020- 1808 0000150F 303020303020 1809 00001515 20 db ' ' 1810 sdline_3: 1811 00001516 2E2E2E2E2E2E2E2E2E- db '................' 1811 0000151F 2E2E2E2E2E2E2E 1812 00001526 20 db 20h 1813 1814 dpfooter1: 1815 00001527 204631203D20436861- db ' F1 = Change Drive ' 1815 00001530 6E6765204472697665- 1815 00001539 2020 1816 0000153B 486F6D65203D204669- db 'Home = First Sector ' 1816 00001544 72737420536563746F- 1816 0000154D 7220 1817 0000154F 50675570203D205072- db 'PgUp = Previous Sector ' 1817 00001558 6576696F7573205365- 1817 00001561 63746F7220 1818 00001566 455343203D20455849- db 'ESC = EXIT' 1818 0000156F 54 1819 00001570 00 db 0 1820 dpfooter2: 1821 00001571 204632203D20436861- db ' F2 = Change Sector ' 1821 0000157A 6E676520536563746F- 1821 00001583 7220 1822 00001585 456E64203D204C6173- db 'End = Last Sector ' 1822 0000158E 7420536563746F7220- 1822 00001597 2020 1823 00001599 5067446F776E203D20- db 'PgDown = Next Sector ' 1823 000015A2 4E6578742053656374- 1823 000015AB 6F72202020 1824 000015B0 454E544552203D2050- db 'ENTER = Prv/Nxt' 1824 000015B9 72762F4E7874 1825 000015BF 00 db 0 1826 1827 F1_ib: 1828 000015C0 10 db 16 ; box width (columns) 1829 000015C1 03 db 3 ; box height (rows) 1830 000015C2 01 db 1 ; label offset (vertical) 1831 000015C3 01 db 1 ; label offset (horizontal) 1832 000015C4 01 db 1 ; text (input) size 1833 000015C5 4E db 4Eh ; box color 1834 000015C6 44726976653A20 db 'Drive: ' ; Label 1835 000015CD 00 db 0 1836 1837 F2_ib: 1838 000015CE 14 db 20 ; box width (columns) 1839 000015CF 03 db 3 ; box height (rows) 1840 000015D0 01 db 1 ; label offset (vertical) 1841 000015D1 01 db 1 ; label offset (horizontal) 1842 000015D2 08 db 8 ; text (input) size 1843 000015D3 4E db 4Eh ; box color 1844 000015D4 536563746F72203A20 db 'Sector : ' ; Label 1845 000015DD 00 db 0 1846 1847 dskr_err: 1848 000015DE 21 db 33 ; box width (columns) 1849 ;db 17 1850 000015DF 03 db 3 ; box height (rows) 1851 000015E0 01 db 1 ; label offset (vertical) 1852 000015E1 01 db 1 ; label offset (horizontal) 1853 000015E2 00 db 0 ; text (input) size 1854 000015E3 4E db 4Eh ; box color 1855 000015E4 4472697665206E6F74- db 'Drive not ready or read error !' ; Label 1855 000015ED 207265616479206F72- 1855 000015F6 207265616420657272- 1855 000015FF 6F722021 1856 ;db ' Error : ' 1857 ;err_code_str: 1858 ; db '00h ! ' 1859 00001603 00 db 0 1860 1861 ; Additional functions, variables/pointers for 1862 ; Real Mode adaption (out of unix386.s) variables/pointers 1863 1864 set_cpos: 1865 00001604 668B15[D8160000] mov dx, [cursor_posn] ; dh = row, dl = column 1866 set_cposx: 1867 ; DX = cursor position 1868 0000160B B402 mov ah, 2 ; Set cursor position 1869 0000160D 30FF xor bh, bh ; for video page 0 1870 0000160F CD31 int 31h ; TRDOS 386 video interrupt 1871 00001611 C3 retn 1872 1873 align 2 1874 1875 prg_msg: 1876 00001612 0D0A07 db 0Dh, 0Ah, 07h 1877 00001615 4469736B2052656164- db 'Disk Read Utility - TRDOS 386 v2 Disk I/O and timer test.' 1877 0000161E 205574696C69747920- 1877 00001627 2D205452444F532033- 1877 00001630 383620763220446973- 1877 00001639 6B20492F4F20616E64- 1877 00001642 2074696D6572207465- 1877 0000164B 73742E 1878 0000164E 0D0A db 0Dh, 0Ah 1879 ;db 'by Erdogan Tan [07/07/2016]' 1880 00001650 6279204572646F6761- db 'by Erdogan Tan [26/08/2020]' ; LBA disk (>8GB) bugfix 1880 00001659 6E2054616E20205B32- 1880 00001662 362F30382F32303230- 1880 0000166B 5D 1881 0000166C 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 1882 00001670 28507265737320616E- db '(Press any key to continue...)' 1882 00001679 79206B657920746F20- 1882 00001682 636F6E74696E75652E- 1882 0000168B 2E2E29 1883 0000168E 0D0A00 db 0Dh, 0Ah, 0 1884 1885 drv_not_ready: 1886 00001691 070D0A db 07h, 0Dh, 0Ah 1887 00001694 4472697665206E6F74- db 'Drive not ready !' 1887 0000169D 2072656164792021 1888 000016A5 0D0A00 db 0Dh, 0Ah, 0 1889 1890 000016A8 30 fd0_type: db '0' 1891 000016A9 30 fd1_type: db '0' 1892 1893 rtc_msg: 1894 000016AA 5265616C2054696D65- db "Real Time Clock - " 1894 000016B3 20436C6F636B202D20 1895 datestr: 1896 000016BC 30302F30302F303030- db "00/00/0000" 1896 000016C5 30 1897 000016C6 2020 db " " 1898 timestr: 1899 000016C8 30303A30303A3030 db "00:00:00" 1900 rtc_msg_end: 1901 000016D0 00 db 0 1902 1903 timer_event: 1904 000016D1 00 db 0 1905 1906 000016D2 90 align 4 ; dword alignment 1907 1908 000016D4 [EC190000] current_txtpos: dd video_buffer 1909 1910 bss_start: 1911 1912 ABSOLUTE bss_start 1913 1914 000016D8 cursor_posn: resw 1 1915 000016DA cursor_shp: resw 1 1916 000016DC cursor_posb: resw 1 ; (cursor position backup, for video page 0) 1917 1918 000016DE txtposoff: resb 1 ; txtpos offset for sector number input 1919 000016DF dscmd: resb 1 ; 0 = change drive 1920 ; 1 = change sector 1921 ; 2 = display disk parameters 1922 1923 000016E0 inds: resb 1 1924 000016E1 paragr: resb 1 1925 1926 000016E2 ibcp: resb 1 ; input box - row position 1927 000016E3 resb 1 ; input box - column position 1928 1929 000016E4 retry_count: resb 1 1930 000016E5 drv: resb 1 ; physical drive number (0, 1, 80h, 81h, 82h, 83h) 1931 1932 000016E6 drv_status: resb 2 ; fd0, fd1 (FFh = failure, 80h = existing) 1933 000016E8 resb 4 ; hd0, hd1 hd2, hd3 (FFh = failure) 1934 ; (80h - 87h = existing) 1935 ; (bit 0 = 1 : LBA ready) 1936 1937 000016EC drv_cylinders : resw 6 1938 000016F8 drv_heads : resw 6 1939 00001704 drv_spt : resw 6 1940 alignb 4 1941 00001710 drv_size : resd 6 1942 1943 00001728 fd0_dpt: resb 16 1944 00001738 fd1_dpt: resb 16 1945 00001748 hd0_dpt: resb 32 1946 00001768 hd1_dpt: resb 32 1947 00001788 hd2_dpt: resb 32 1948 000017A8 hd3_dpt: resb 32 1949 1950 ds_sec: 1951 000017C8 resd 1 ; Current sector (on display), drv 0 1952 000017CC resd 1 ; Current sector (on display), drv 1 1953 000017D0 resd 1 ; Current sector (on display), drv 2 1954 000017D4 resd 1 ; Current sector (on display), drv 3 1955 000017D8 resd 1 ; Current sector (on display), drv 4 1956 000017DC resd 1 ; Current sector (on display), drv 5 1957 1958 000017E0 prev_sec: resd 1 ; previous sector (before reading) 1959 1960 sector_buffer: 1961 000017E4 resb 512 1962 1963 date_day: 1964 000019E4 resb 1 1965 date_month: 1966 000019E5 resb 1 1967 date_year: 1968 000019E6 resb 1 1969 date_century: 1970 000019E7 resb 1 1971 1972 time_second: 1973 000019E8 resb 1 1974 time_minute: 1975 000019E9 resb 1 1976 time_hour: 1977 000019EA resb 1 1978 1979 000019EB resb 1 1980 1981 video_buffer: 1982 000019EC resb 4000 ; 80*25*2 1983 1984 timer_event_number: 1985 0000298C resb 1 1986 1987 0000298D hdc: resb 1 1988 0000298E fdc: resb 1 1989 1990 prev_drv: 1991 0000298F resb 1 1992 1993 alignb 4 1994 1995 bss_end: 1996 1997 _end: