1 ; **************************************************************************** 2 ; runme.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'runme.prg') 3 ; ---------------------------------------------------------------------------- 4 ; RUNME.PRG ! TEST program ! TRDOS 386 VGA Functionality test ! 5 ; 6 ; 08/08/2016 7 ; 8 ; [ Last Modification: 10/07/2016 ] 9 ; 10 ; Derived from disassembly of 'runme.com' (1/9/1995) intro by gecemavisi bbs. 11 ; 12 ; Assembler: NASM 2.11 13 14 ; Original code disassembler: IDA Pro Free (MASM syntax) 15 ; 16 ; (Original -msdos- code has been modifed for TRDOS 386 system calls and 17 ; other protected mode (TRDOS 386) interrupts.) 18 ; **************************************************************************** 19 20 ; 19/05/2016 21 ; 29/04/2016 22 ; TRDOS 386 system calls (temporary list!) 23 _ver equ 0 24 _exit equ 1 25 _fork equ 2 26 _read equ 3 27 _write equ 4 28 _open equ 5 29 _close equ 6 30 _wait equ 7 31 _creat equ 8 32 _link equ 9 33 _unlink equ 10 34 _exec equ 11 35 _chdir equ 12 36 _time equ 13 37 _mkdir equ 14 38 _chmod equ 15 39 _chown equ 16 40 _break equ 17 41 _stat equ 18 42 _seek equ 19 43 _tell equ 20 44 _mount equ 21 45 _umount equ 22 46 _setuid equ 23 47 _getuid equ 24 48 _stime equ 25 49 _quit equ 26 50 _intr equ 27 51 _fstat equ 28 52 _emt equ 29 53 _mdate equ 30 54 _video equ 31 55 _audio equ 32 56 _ilgins equ 33 57 _sleep equ 34 58 _msg equ 35 59 _geterr equ 36 60 _rsrvd1 equ 37 61 _pri equ 38 62 _rele equ 39 63 64 %macro sys 1-4 65 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 66 ; 03/09/2015 67 ; 13/04/2015 68 ; Retro UNIX 386 v1 system call. 69 %if %0 >= 2 70 mov ebx, %2 71 %if %0 >= 3 72 mov ecx, %3 73 %if %0 = 4 74 mov edx, %4 75 %endif 76 %endif 77 %endif 78 mov eax, %1 79 ;int 30h 80 int 40h ; TRDOS 386 (TRDOS v2.0) 81 %endmacro 82 83 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 84 ; sys systemcall (eax) , , 85 86 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 87 ; ;; This file is generated by The Interactive Disassembler (IDA) ;; 88 ; ;; Copyright (c) 2010 by Hex-Rays SA, ;; 89 ; ;; Licensed to: Freeware version ;; 90 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 91 ; 92 ; File Name : C:\Documents and Settings\Erdoðan Tan\Desktop\RUNME.COM 93 ; Format : MS-DOS COM-file 94 ; Base Address: 1000h Range: 10100h-10398h Loaded length: 298h 95 96 ; NOTE: Assembly source code of RUNME.COM (by IDA, in MASM syntax) 97 ; has been modified to NASM syntax (for 386 protected mode & for TRDOS 386) 98 ; by Erdogan Tan. (10/07/2016) 99 100 [BITS 32] ; We need 32-bit intructions for protected mode 101 102 [ORG 0] 103 104 start: 105 106 00000000 E8B7020000 call sub_10321 107 ;mov edi, 3A3h ; _end = 398h (runme.com) 108 00000005 BF[AF030000] mov edi, _end + 11 ; (runme.prg) 109 0000000A B1C8 mov cl, 0C8h 110 111 loc_10108: 112 0000000C E8A9000000 call sub_10183 113 00000011 668917 mov [edi], dx 114 00000014 886704 mov [edi+4], ah 115 00000017 83C705 add edi, 5 116 0000001A E2F0 loop loc_10108 117 118 0000001C BE[6F030000] mov esi, prg_msg 119 00000021 E80C030000 call print_msg 120 121 00000026 31C0 xor eax, eax 122 00000028 31DB xor ebx, ebx 123 124 ; DIRECT VGA MEMORY ACCESS 125 ;xor ebx, ebx 126 0000002A B705 mov bh, 5 ; Direct access/map to VGA memory (0A0000h) 127 ;mov eax, _video ; 1Fh 128 0000002C B01F mov al, 1Fh ; sys _video ; TRDOS 386 Video functions 129 0000002E CD40 int 40h ; TRDOS 386 system call 130 131 ; eax = 0A0000h 132 00000030 21C0 and eax, eax 133 00000032 747D jz terminate ; error (eax = 0) 134 135 ; ah = 0 136 00000034 B013 mov al, 13h ; set video mode to 13h 137 ;int 10h ; - VIDEO - 138 00000036 CD31 int 31h ; TRDOS 386 - VIDEO Interrupt 139 ; 140 00000038 66B82411 mov ax, 1124h ; set (load) 8x16 VGA font 141 0000003C B301 mov bl, 1 ; 14 rows 142 ;int 10h ; - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS 143 0000003E CD31 int 31h ; TRDOS 386 - VIDEO Interrupt 144 145 loc_10125: 146 00000040 66BADA03 mov dx, 3DAh 147 loc_10128: ; Video status bits 148 ;in al, dx 149 ; TRDOS 386 - IOCTL Interrupt (for ring 3) 150 00000044 B400 mov ah, 0 ; in (byte) 151 ; al = data byte 152 ; dx = port number 153 00000046 CD34 int 34h ; TRDOS 386 - IOCTL 154 ;test al, 8 ; bit 3 : 1 = vertical sync pulse is occurring. 155 ;jz short loc_10128 156 ;mov edi, 3A3h 157 00000048 BF[AF030000] mov edi, _end + 11 ; (runme.prg) 158 0000004D BE00000A00 mov esi, 0A0000h 159 00000052 66B9C800 mov cx, 0C8h 160 161 loc_10135: 162 ;movzx ebx, word [edi] 163 00000056 668B1F mov bx, [edi] 164 00000059 803C3322 cmp byte [ebx+esi], 22h 165 0000005D 7406 je short loc_10143 166 0000005F 8A4704 mov al, [edi+4] 167 00000062 880433 mov [ebx+esi], al 168 169 loc_10143: 170 ;movzx eax, word [edi+2] 171 ;sub ebx, eax 172 00000065 668B4702 mov ax, [edi+2] 173 00000069 6629C3 sub bx, ax 174 0000006C 730A jnb short loc_10151 175 ;add ebx, 140h 176 0000006E 6681C34001 add bx, 140h 177 00000073 E842000000 call sub_10183 178 179 loc_10151: 180 00000078 66891F mov [edi], bx 181 0000007B 8A2433 mov ah, [ebx+esi] 182 0000007E 886704 mov [edi+4], ah 183 00000081 08E4 or ah, ah 184 00000083 7507 jnz short loc_10164 185 00000085 D0E0 shl al, 1 186 00000087 040E add al, 0Eh 187 00000089 880433 mov [ebx+esi], al 188 189 loc_10164: 190 0000008C 83C705 add edi, 5 191 0000008F 81C640010000 add esi, 140h 192 00000095 E2BF loop loc_10135 193 00000097 E85A000000 call sub_101AC 194 0000009C E83D010000 call sub_1027A 195 000000A1 B401 mov ah, 1 ; check keyboard buffer 196 ;int 16h ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR 197 ; Return: ZF clear if character in buffer 198 ; AH = scan code, AL = character 199 ; ZF set if no character in buffer 200 000000A3 CD32 int 32h ; TRDOS 386 - KEYBOARD Interrupt 201 000000A5 7499 jz short loc_10125 202 000000A7 B400 mov ah, 0 ; read char from keyboard buffer 203 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 204 ; Return: AH = scan code, AL = character 205 000000A9 CD32 int 32h ; TRDOS 386 - KEYBOARD Interrupt 206 000000AB 66B80300 mov ax, 3 ; set mode (to 80x25 color, text) 207 ;int 10h ; - VIDEO - SET VIDEO MODE 208 ; AL = mode 209 000000AF CD31 int 31h ; TRDOS 386 - Video Interrupt 210 211 terminate: 212 sys _exit ; INT 40h 212 <1> 212 <1> 212 <1> 212 <1> 212 <1> %if %0 >= 2 212 <1> mov ebx, %2 212 <1> %if %0 >= 3 212 <1> mov ecx, %3 212 <1> %if %0 = 4 212 <1> mov edx, %4 212 <1> %endif 212 <1> %endif 212 <1> %endif 212 000000B1 B801000000 <1> mov eax, %1 212 <1> 212 000000B6 CD40 <1> int 40h 213 here: 214 000000B8 EBFE jmp short here 215 216 sub_10183: 217 000000BA 66B89C5B mov ax, 5B9Ch 218 000000BE 66C1C003 rol ax, 3 219 000000C2 6683C007 add ax, 7 220 ;mov [sub_10183+1], ax ; runme.com (16 bit) 221 000000C6 66A3[BC000000] mov [sub_10183+2], ax ; runme.prg (32 bit) 222 loc_1018F: 223 000000CC 6605B935 add ax, 35B9h 224 ;add word [loc_1018F+1], 0A0A5h ; runme.com 225 000000D0 668105[CE000000]A5- add word [loc_1018F+2], 0A0A5h ; runme.prg 225 000000D8 A0 226 ;ror word [loc_1018F+1], 7 ; runme.com 227 000000D9 66C10D[CE000000]07 ror word [loc_1018F+2], 7 ; runme.prg 228 000000E1 6631D2 xor dx, dx 229 000000E4 66BD4001 mov bp, 140h 230 000000E8 66F7F5 div bp 231 000000EB 6683E007 and ax, 7 232 000000EF 6640 inc ax 233 000000F1 66894702 mov [edi+2], ax 234 000000F5 C3 retn 235 236 sub_101AC: 237 ;inc byte [ds:78Bh] 238 000000F6 FE05[97070000] inc byte [_end+11+1000] 239 ;and byte [ds:78Bh], 3 240 000000FC 8025[97070000]03 and byte [_end+11+1000], 3 241 00000103 7530 jnz short locret_101DF 242 ;mov si, [word_101E0] 243 00000105 8B35[36010000] mov esi, [word_101E0] 244 0000010B AC lodsb 245 0000010C 08C0 or al, al 246 0000010E 7506 jnz short loc_101C4 247 ;mov si, 220h 248 00000110 BE[78010000] mov esi, loc_220 249 00000115 AC lodsb 250 251 loc_101C4: 252 00000116 3C20 cmp al, 20h 253 00000118 730D jnb short loc_101D4 254 0000011A 88C4 mov ah, al 255 0000011C AC lodsb 256 0000011D 6689C2 mov dx, ax 257 00000120 B402 mov ah, 2 ; set cursor position 258 00000122 30FF xor bh, bh 259 ;int 10h ; - VIDEO - SET CURSOR POSITION 260 ; DH,DL = row, column (0,0 = upper left) 261 ; BH = page number 262 00000124 CD31 int 31h ; TRDOS 386 - VIDEO Interrupt 263 00000126 AC lodsb 264 loc_101D4: 265 ;mov [word_101E0], si 266 00000127 8935[36010000] mov [word_101E0], esi 267 0000012D 66BB2200 mov bx, 22h 268 00000131 B40E mov ah, 0Eh ; write tty 269 ;int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) 270 ; AL = character, BH = display page (alpha modes) 271 ; BL = foreground color (graphics modes) 272 00000133 CD31 int 31h ; TRDOS 386 - VIDEO Interrupt 273 locret_101DF: 274 00000135 C3 retn 275 276 ;word_101E0: dw 1E2h 277 00000136 [3A010000] word_101E0: dd loc_1E2 278 loc_1E2: 279 0000013A 04 db 4 280 0000013B 0F db 0Fh 281 0000013C 20 db 20h 282 0000013D 20 db 20h 283 0000013E 20 db 20h 284 0000013F 47 db 47h ; G 285 00000140 EE db 0EEh ; ¯ 286 00000141 43 db 43h ; C 287 00000142 EE db 0EEh ; ¯ 288 00000143 20 db 20h 289 00000144 20 db 20h 290 00000145 20 db 20h 291 00000146 05 db 5 292 00000147 0F db 0Fh 293 00000148 20 db 20h 294 00000149 20 db 20h 295 0000014A 4D db 4Dh ; M 296 0000014B 92 db 92h ; Æ 297 0000014C 56 db 56h ; V 298 0000014D AD db 0ADh ; ¡ 299 0000014E 53 db 53h ; S 300 0000014F AD db 0ADh ; ¡ 301 00000150 20 db 20h 302 00000151 20 db 20h 303 00000152 06 db 6 304 00000153 0C db 0Ch 305 00000154 20 db 20h 306 00000155 20 db 20h 307 00000156 20 db 20h 308 00000157 20 db 20h 309 00000158 43 db 43h ; C 310 00000159 41 db 41h ; A 311 0000015A 4C db 4Ch ; L 312 0000015B 4C db 4Ch ; L 313 0000015C 20 db 20h 314 0000015D 4E db 4Eh ; N 315 0000015E 4F db 4Fh ; O 316 0000015F 57 db 57h ; W 317 00000160 20 db 20h 318 00000161 20 db 20h 319 00000162 20 db 20h 320 00000163 20 db 20h 321 00000164 07 db 7 322 00000165 0C db 0Ch 323 00000166 2B db 2Bh ; + 324 00000167 39 db 39h ; 9 325 00000168 30 db 30h ; 0 326 00000169 2D db 2Dh ; - 327 0000016A 32 db 32h ; 2 328 0000016B 31 db 31h ; 1 329 0000016C 36 db 36h ; 6 330 0000016D 2D db 2Dh ; - 331 0000016E 33 db 33h ; 3 332 0000016F 31 db 31h ; 1 333 00000170 35 db 35h ; 5 334 00000171 2D db 2Dh ; - 335 00000172 32 db 32h ; 2 336 00000173 32 db 32h ; 2 337 00000174 33 db 33h ; 3 338 00000175 33 db 33h ; 3 339 00000176 20 db 20h 340 00000177 20 db 20h 341 loc_220: 342 00000178 04 db 4 343 00000179 13 db 13h 344 0000017A 45 db 45h ; E 345 0000017B 43 db 43h ; C 346 0000017C 45 db 45h ; E 347 0000017D 20 db 20h 348 0000017E 20 db 20h 349 0000017F 20 db 20h 350 00000180 04 db 4 351 00000181 13 db 13h 352 00000182 65 db 65h ; e 353 00000183 43 db 43h ; C 354 00000184 65 db 65h ; e 355 00000185 20 db 20h 356 00000186 04 db 4 357 00000187 13 db 13h 358 00000188 EE db 0EEh ; ¯ 359 00000189 43 db 43h ; C 360 0000018A EE db 0EEh ; ¯ 361 0000018B 20 db 20h 362 0000018C 20 db 20h 363 0000018D 20 db 20h 364 0000018E 00 db 0 365 loc_237: 366 0000018F E0 db 0E0h ; Ó 367 00000190 20 db 20h 368 00000191 21 db 21h ; ! 369 00000192 00 db 0 370 00000193 C3 db 0C3h ; + 371 00000194 B6 db 0B6h ; Â 372 00000195 F5 db 0F5h ; § 373 00000196 F6 db 0F6h ; ÷ 374 00000197 03 db 3 375 00000198 03 db 3 376 00000199 02 db 2 377 loc_242: 378 0000019A 40 db 40h ; @ 379 0000019B 00 db 0 380 0000019C 00 db 0 381 0000019D 00 db 0 382 0000019E FA db 0FAh ; · 383 0000019F D9 db 0D9h ; - 384 000001A0 37 db 37h ; 7 385 000001A1 04 db 4 386 000001A2 00 db 0 387 000001A3 00 db 0 388 000001A4 00 db 0 389 loc_24D: 390 000001A5 80 db 80h ; Ç 391 000001A6 84 db 84h ; ä 392 loc_24F: 393 000001A7 FC db 0FCh ; ³ 394 000001A8 08 db 8 395 000001A9 99 db 99h ; Ö 396 000001AA 21 db 21h ; ! 397 000001AB A5 db 0A5h ; Ñ 398 000001AC 1E db 1Eh 399 000001AD 99 db 99h ; Ö 400 000001AE 1B db 1Bh 401 000001AF A3 db 0A3h ; ú 402 000001B0 18 db 18h 403 000001B1 A5 db 0A5h ; Ñ 404 000001B2 15 db 15h 405 000001B3 99 db 99h ; Ö 406 000001B4 21 db 21h ; ! 407 000001B5 A5 db 0A5h ; Ñ 408 000001B6 28 db 28h ; ( 409 000001B7 99 db 99h ; Ö 410 000001B8 2F db 2Fh ; / 411 000001B9 7D db 7Dh ; } 412 000001BA FE db 0FEh ; ¦ 413 loc_263: 414 000001BB FC db 0FCh ; ³ 415 000001BC 04 db 4 416 000001BD 80 db 80h ; Ç 417 000001BE C0 db 0C0h ; L 418 000001BF 7D db 7Dh ; } 419 000001C0 FC db 0FCh ; ³ 420 000001C1 10 db 10h 421 000001C2 8D db 8Dh ; ý 422 000001C3 90 db 90h ; É 423 000001C4 7D db 7Dh ; } 424 000001C5 FE db 0FEh ; ¦ 425 loc_26E: 426 ;db 4Fh ; O 427 ;db 2 428 000001C6 [A7010000] dd loc_24F 429 ;db 4Fh ; O 430 ;db 2 431 000001CA [A7010000] dd loc_24F 432 ;db 63h ; c 433 ;db 2 434 000001CE [BB010000] dd loc_263 435 loc_274: 436 ;db 4Fh ; O 437 ;db 2 438 000001D2 [A7010000] dd loc_24F 439 ;db 4Dh ; M 440 ;db 2 441 000001D6 [A5010000] dd loc_24D 442 ;db 63h ; c 443 ;db 2 444 000001DA [BB010000] dd loc_263 445 446 sub_1027A: 447 000001DE 8035[69030000]01 xor byte [byte_10393], 1 448 000001E5 750E jnz short locret_1028C 449 000001E7 31FF xor edi, edi 450 451 loc_10283: 452 000001E9 E808000000 call sub_1028D 453 000001EE 47 inc edi 454 ;cmp edi, 3 455 000001EF 6683FF03 cmp di, 3 456 000001F3 75F4 jne short loc_10283 457 locret_1028C: 458 000001F5 C3 retn 459 460 sub_1028D: 461 000001F6 89FB mov ebx, edi 462 ;shl bx, 1 463 000001F8 66C1E302 shl bx, 2 464 ;mov si, [bx+274h] 465 000001FC 8BB3[D2010000] mov esi, [ebx+loc_274] 466 ;dec byte [di+394h] 467 00000202 FE8F[6A030000] dec byte [edi+loc_394] 468 00000208 75EB jnz short locret_1028C 469 ;mov byte [di+394h], 8 470 0000020A C687[6A030000]08 mov byte [edi+loc_394], 8 471 472 loc_102A0: 473 00000211 AC lodsb 474 00000212 3C7D cmp al, 7Dh 475 00000214 7511 jne short loc_102B1 476 ;dec byte [edi+3A0h] 477 00000216 FE8F[AC030000] dec byte [edi+_end+8] ; 3A3h = _end + 11 478 0000021C 74F3 jz short loc_102A0 479 ;mov si, [bx+39Ah] 480 ;movzx esi, word [ebx+_end+2] ; 39Ah = _end + 11 - 9 481 0000021E 668BB3[A6030000] mov si, [ebx+_end+2] 482 00000225 EBEA jmp short loc_102A0 483 484 loc_102B1: 485 00000227 3CFC cmp al, 0FCh 486 00000229 7510 jne short loc_102C0 487 0000022B AC lodsb 488 ;mov [di+3A0h], al 489 0000022C 8887[AC030000] mov byte [edi+_end+8], al 490 ;mov [bx+39Ah], si 491 00000232 6689B3[A6030000] mov [ebx+_end+2], si 492 00000239 EBD6 jmp short loc_102A0 493 494 loc_102C0: 495 0000023B 3CFE cmp al, 0FEh 496 0000023D 7508 jne short loc_102CA 497 ;mov si, [bx+26Eh] 498 0000023F 8BB3[C6010000] mov esi, [ebx+loc_26E] 499 00000245 EBCA jmp short loc_102A0 500 501 loc_102CA: 502 00000247 6650 push ax 503 00000249 AC lodsb 504 0000024A D0C0 rol al, 1 505 0000024C D0E8 shr al, 1 506 0000024E 7308 jnb short loc_102D8 507 ;mov [di+394h], al 508 00000250 8887[6A030000] mov [edi+loc_394], al 509 00000256 EB09 jmp short loc_102DF 510 511 loc_102D8: 512 00000258 88C4 mov ah, al 513 0000025A B040 mov al, 40h 514 0000025C E8A8000000 call sub_10358 515 516 loc_102DF: 517 00000261 6658 pop ax 518 00000263 247F and al, 7Fh 519 00000265 7446 jz short loc_10318 520 00000267 6650 push ax 521 ;mov ah, [di+397h] 522 00000269 8AA7[6D030000] mov ah, [edi+loc_397] 523 0000026F B0B0 mov al, 0B0h 524 00000271 E893000000 call sub_10358 525 00000276 6658 pop ax 526 00000278 FEC8 dec al 527 0000027A 30E4 xor ah, ah 528 0000027C B30C mov bl, 0Ch 529 0000027E F6F3 div bl 530 ;movzx ebx, ax 531 00000280 6689C3 mov bx, ax 532 00000283 66C1EB07 shr bx, 7 533 00000287 66C1E00A shl ax, 0Ah 534 ;or ax, [bx+370h] 535 0000028B 660B83[46030000] or ax, [ebx+loc_370] 536 ;mov [di+397h], ah 537 00000292 88A7[6D030000] mov [edi+loc_397], ah 538 00000298 80CC20 or ah, 20h 539 0000029B 88C3 mov bl, al 540 0000029D B0B0 mov al, 0B0h 541 0000029F E865000000 call sub_10358 542 000002A4 B0A0 mov al, 0A0h 543 000002A6 88DC mov ah, bl 544 000002A8 E85C000000 call sub_10358 545 546 loc_10318: 547 ;shl di, 1 548 000002AD 66C1E702 shl di, 2 549 ;mov [di+274h], si 550 000002B1 89B7[D2010000] mov [edi+loc_274], esi 551 ;shr di, 1 552 000002B7 66C1EF02 shr di, 2 553 000002BB C3 retn 554 555 sub_10321: 556 000002BC 66B80120 mov ax, 2001h 557 000002C0 E847000000 call sub_1035A 558 000002C5 66B80800 mov ax, 8 559 000002C9 E83E000000 call sub_1035A 560 000002CE 66B8BDC0 mov ax, 0C0BDh 561 000002D2 E835000000 call sub_1035A 562 000002D7 31FF xor edi, edi 563 ;mov si, 237h 564 000002D9 BE[8F010000] mov esi, loc_237 565 000002DE E80E000000 call sub_10345 566 000002E3 C6460308 mov byte [esi+3], 8 567 000002E7 E805000000 call sub_10345 568 ;mov si, 242h 569 000002EC BE[9A010000] mov esi, loc_242 570 571 sub_10345: 572 000002F1 31DB xor ebx, ebx 573 loc_10347: 574 ;mov al, [bx+388h] 575 000002F3 8A83[5E030000] mov al, [ebx+loc_388] 576 000002F9 8A2433 mov ah, [ebx+esi] 577 000002FC E808000000 call sub_10358 578 00000301 43 inc ebx 579 00000302 83FB0B cmp ebx, 0Bh 580 00000305 72EC jb short loc_10347 581 00000307 47 inc edi 582 00000308 C3 retn 583 584 sub_10358: 585 00000309 6601F8 add ax, di 586 587 sub_1035A: 588 0000030C 6650 push ax 589 0000030E 66BA8803 mov dx, 388h 590 ;out dx, al 591 ; TRDOS 386 - IOCTL Interrupt (for ring 3) 592 00000312 B401 mov ah, 1 ; out (byte) 593 ; al = data byte 594 ; dx = port number 595 00000314 CD34 int 34h ; TRDOS 386 - IOCTL 596 ;in al, dx 597 ;in al, dx 598 ;in al, dx 599 ;in al, dx 600 ;out dx, al 601 ; TRDOS 386 - IOCTL Interrupt (for ring 3) 602 00000316 B400 mov ah, 0 ; in (byte) 603 ; al = data byte 604 ; dx = port number 605 00000318 CD34 int 34h ; TRDOS 386 - IOCTL 606 0000031A 6658 pop ax 607 0000031C FEC2 inc dl 608 0000031E 88E0 mov al, ah 609 ;out dx, al 610 ; TRDOS 386 - IOCTL Interrupt (for ring 3) 611 00000320 B401 mov ah, 1 ; out (byte) 612 ; al = data byte 613 ; dx = port number 614 00000322 CD34 int 34h ; TRDOS 386 - IOCTL 615 00000324 FECA dec dl 616 00000326 B914000000 mov ecx, 14h 617 loc_1036C: 618 ;in al, dx 619 ; TRDOS 386 - IOCTL Interrupt (for ring 3) 620 0000032B B400 mov ah, 0 ; in (byte) 621 ; al = data byte 622 ; dx = port number 623 0000032D CD34 int 34h ; TRDOS 386 - IOCTL 624 0000032F E2FA loop loc_1036C 625 00000331 C3 retn 626 627 print_msg: 628 00000332 66BB0700 mov bx, 7 629 00000336 B40E mov ah, 0Eh 630 pmsg_loop: 631 00000338 AC lodsb 632 00000339 20C0 and al, al 633 0000033B 7404 jz short pmsg_ok 634 0000033D CD31 int 31h ; TRDOS 386 video interrupt 635 0000033F EBF7 jmp short pmsg_loop 636 pmsg_ok: 637 00000341 B410 mov ah, 10h ; Getchar 638 00000343 CD32 int 32h ; TRDOS 386 keyboard interrupt 639 00000345 C3 retn 640 641 loc_370: 642 00000346 57 db 57h ; W 643 00000347 01 db 1 644 00000348 6B db 6Bh ; k 645 00000349 01 db 1 646 0000034A 81 db 81h ; ü 647 0000034B 01 db 1 648 0000034C 98 db 98h ; Ý 649 0000034D 01 db 1 650 0000034E B0 db 0B0h ; - 651 0000034F 01 db 1 652 00000350 CA db 0CAh ; ¦ 653 00000351 01 db 1 654 00000352 E5 db 0E5h ; Õ 655 00000353 01 db 1 656 00000354 02 db 2 657 00000355 02 db 2 658 00000356 20 db 20h 659 00000357 02 db 2 660 00000358 41 db 41h ; A 661 00000359 02 db 2 662 0000035A 63 db 63h ; c 663 0000035B 02 db 2 664 0000035C 87 db 87h ; ç 665 0000035D 02 db 2 666 loc_388: 667 0000035E 20 db 20h 668 0000035F 23 db 23h ; # 669 00000360 40 db 40h ; @ 670 00000361 43 db 43h ; C 671 00000362 60 db 60h ; ` 672 00000363 63 db 63h ; c 673 00000364 80 db 80h ; Ç 674 00000365 83 db 83h ; â 675 00000366 E0 db 0E0h ; Ó 676 00000367 E3 db 0E3h ; Ò 677 00000368 C0 db 0C0h ; L 678 00000369 00 byte_10393: db 0 679 loc_394: 680 0000036A 01 db 1 681 0000036B 01 db 1 682 0000036C 01 db 1 683 loc_397: 684 0000036D 1A db 1Ah 685 686 0000036E 00 db 0 687 prg_msg: 688 0000036F 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 - RUNME.PRG' 688 00000378 414E202D205452444F- 688 00000381 5320333836202D2052- 688 0000038A 554E4D452E505247 689 00000392 0D0A db 0Dh, 0Ah 690 00000394 30382F30382F323031- db '08/08/2016' 690 0000039D 36 691 0000039E 0D0A db 0Dh, 0Ah 692 000003A0 00 db 0 693 000003A1 [A403] dw _end 694 000003A3 00 db 0 695 _end: