     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                                  ; 10/07/2016
     7                                  ;
     8                                  ; [ Last Modification: 23/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) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    85                                  
    86                                  ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    87                                  ; ;;	This file is generated by The Interactive Disassembler (IDA)	   ;;
    88                                  ; ;;	Copyright (c) 2010 by Hex-Rays SA, <support@hex-rays.com>	   ;;
    89                                  ; ;;			 Licensed to: Freeware version			   ;;
    90                                  ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    91                                  ;
    92                                  ; File Name   :	C:\Documents and Settings\Erdoan 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 E8C6020000              call	sub_10321
   107                                  ;mov	edi, 3A3h ; _end = 398h (runme.com)
   108 00000005 BF[BC030000]            mov     edi, _end + 11 ; (runme.prg)
   109 0000000A B1C8                    mov	cl, 0C8h
   110                                  
   111                                  loc_10108:
   112 0000000C E8B8000000              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[7E030000]            mov     esi, prg_msg
   119 00000021 E81B030000              call	print_msg
   120                                  
   121 00000026 6631C0                  xor	ax, ax
   122 00000029 CD32                    int	32h
   123                                  
   124 0000002B 31C0                    xor	eax, eax
   125 0000002D 31DB                    xor	ebx, ebx
   126                                  
   127                                  ; DIRECT VGA MEMOY ACCESS
   128                                  ;xor	ebx, ebx
   129 0000002F B705                    mov	bh, 5 ; Direct access/map to VGA memory (0A0000h)
   130                                  ;mov	eax, _video ; 1Fh
   131 00000031 B01F                    mov	al, 1Fh ; sys _video ; TRDOS 386 Video functions
   132 00000033 CD40                    int	40h   ; TRDOS 386 system call
   133                                  
   134                                  ; eax = 0A0000h
   135 00000035 21C0                    and	eax, eax
   136 00000037 0F8483000000            jz      terminate ; error (eax = 0)
   137                                  
   138                                  ; *************************
   139                                  
   140 0000003D 30E4                    xor 	ah, ah
   141                                  
   142                                  
   143                                  ; ah = 0
   144 0000003F B013                    mov	al, 13h ; set video mode to 13h 
   145                                  ;int	10h		; - VIDEO -
   146 00000041 CD31                    int	31h  ; TRDOS 386 - VIDEO Interrupt
   147                                  ;
   148 00000043 66B82411                mov	ax, 1124h ; set (load) 8x16 VGA font
   149 00000047 B301                    mov	bl, 1	; 14 rows
   150                                  ;int	10h  ; - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS
   151 00000049 CD31                    int	31h  ; TRDOS 386 - VIDEO Interrupt
   152                                  
   153                                  loc_10125:
   154 0000004B 66BADA03                mov	dx, 3DAh
   155                                  loc_10128:	; Video	status bits
   156                                  ;in	al, dx		
   157                                  ; TRDOS 386 - IOCTL Interrupt (for ring 3)
   158 0000004F B400                    mov	ah, 0 ; in (byte)
   159                                  ; al = data byte
   160                                  ; dx = port number
   161 00000051 CD34                    int	34h ; TRDOS 386 - IOCTL 
   162 00000053 A808                    test	al, 8	; bit 3 : 1 = vertical sync pulse is occurring.
   163 00000055 74F8                    jz	short loc_10128
   164                                  ;mov	edi, 3A3h
   165 00000057 BF[BC030000]            mov     edi, _end + 11 ; (runme.prg)
   166 0000005C BE00000A00              mov	esi, 0A0000h
   167 00000061 66B9C800                mov	cx, 0C8h
   168                                  
   169                                  loc_10135:
   170                                  ;movzx	ebx, word [edi]
   171 00000065 668B1F                  mov	bx, [edi]
   172 00000068 803C3322                cmp	byte [ebx+esi], 22h
   173 0000006C 7406                    je	short loc_10143
   174 0000006E 8A4704                  mov	al, [edi+4]
   175 00000071 880433                  mov	[ebx+esi], al
   176                                  
   177                                  loc_10143:
   178                                  ;movzx	eax, word [edi+2]
   179                                  ;sub	ebx, eax
   180 00000074 668B4702                mov	ax, [edi+2]
   181 00000078 6629C3                  sub	bx, ax
   182 0000007B 730A                    jnb	short loc_10151
   183                                  ;add	ebx, 140h
   184 0000007D 6681C34001              add	bx, 140h
   185 00000082 E842000000              call	sub_10183
   186                                  
   187                                  loc_10151:
   188 00000087 66891F                  mov	[edi], bx
   189 0000008A 8A2433                  mov	ah, [ebx+esi]
   190 0000008D 886704                  mov	[edi+4], ah
   191 00000090 08E4                    or	ah, ah
   192 00000092 7507                    jnz	short loc_10164
   193 00000094 D0E0                    shl	al, 1
   194 00000096 040E                    add	al, 0Eh
   195 00000098 880433                  mov	[ebx+esi], al
   196                                  
   197                                  loc_10164:
   198 0000009B 83C705                  add	edi, 5
   199 0000009E 81C640010000            add	esi, 140h
   200 000000A4 E2BF                    loop	loc_10135
   201 000000A6 E85A000000              call	sub_101AC
   202 000000AB E83D010000              call	sub_1027A
   203 000000B0 B401                    mov	ah, 1	; check keyboard buffer
   204                                  ;int	16h		; KEYBOARD - CHECK BUFFER, DO NOT CLEAR
   205                                  			; Return: ZF clear if character	in buffer
   206                                  			; AH = scan code, AL = character
   207                                  			; ZF set if no character in buffer
   208 000000B2 CD32                    int	32h	; TRDOS 386 - KEYBOARD Interrupt
   209 000000B4 7495                    jz	short loc_10125
   210 000000B6 B400                    mov	ah, 0 ; read char from keyboard buffer
   211                                  ;int	16h		; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   212                                  			; Return: AH = scan code, AL = character
   213 000000B8 CD32                    int	32h	; TRDOS 386 - KEYBOARD Interrupt
   214 000000BA 66B80300                mov	ax, 3	; set mode (to 80x25 color, text)	
   215                                  ;int	10h		; - VIDEO - SET	VIDEO MODE
   216                                  			; AL = mode
   217 000000BE CD32                    int	32h	; TRDOS 386 - KEYBOARD Interrupt
   218                                  
   219                                  terminate:
   220                                  	sys 	_exit   ; INT 40h
   220                              <1> 
   220                              <1> 
   220                              <1> 
   220                              <1> 
   220                              <1>  %if %0 >= 2
   220                              <1>  mov ebx, %2
   220                              <1>  %if %0 >= 3
   220                              <1>  mov ecx, %3
   220                              <1>  %if %0 = 4
   220                              <1>  mov edx, %4
   220                              <1>  %endif
   220                              <1>  %endif
   220                              <1>  %endif
   220 000000C0 B801000000          <1>  mov eax, %1
   220                              <1> 
   220 000000C5 CD40                <1>  int 40h
   221                                  here:
   222 000000C7 EBFE                    	jmp	short here
   223                                  
   224                                  sub_10183:
   225 000000C9 66B89C5B                mov	ax, 5B9Ch
   226 000000CD 66C1C003                rol	ax, 3
   227 000000D1 6683C007                add	ax, 7
   228 000000D5 66A3[CA000000]          mov	[sub_10183+1], ax
   229                                  loc_1018F:
   230 000000DB 6605B935                add	ax, 35B9h
   231 000000DF 668105[DC000000]A5-     add	word [loc_1018F+1], 0A0A5h
   231 000000E7 A0                 
   232 000000E8 66C10D[DC000000]07      ror	word [loc_1018F+1], 7
   233 000000F0 6631D2                  xor	dx, dx
   234 000000F3 66BD4001                mov	bp, 140h
   235 000000F7 66F7F5                  div	bp
   236 000000FA 6683E007                and	ax, 7
   237 000000FE 6640                    inc	ax
   238 00000100 66894702                mov	[edi+2], ax
   239 00000104 C3                      retn
   240                                  
   241                                  sub_101AC:
   242                                  ;inc	byte [ds:78Bh]
   243 00000105 FE05[A4070000]          inc	byte [_end+11+1000]
   244                                  ;and	byte [ds:78Bh], 3
   245 0000010B 8025[A4070000]03        and	byte [_end+11+1000], 3
   246 00000112 7530                    jnz	short locret_101DF
   247                                  ;mov	si, [word_101E0]
   248 00000114 8B35[45010000]          mov	esi, [word_101E0]
   249 0000011A AC                      lodsb
   250 0000011B 08C0                    or	al, al
   251 0000011D 7506                    jnz	short loc_101C4
   252                                  ;mov	si, 220h
   253 0000011F BE[87010000]            mov	esi, loc_220
   254 00000124 AC                      lodsb
   255                                  
   256                                  loc_101C4:
   257 00000125 3C20                    cmp	al, 20h
   258 00000127 730D                    jnb	short loc_101D4
   259 00000129 88C4                    mov	ah, al
   260 0000012B AC                      lodsb
   261 0000012C 6689C2                  mov	dx, ax
   262 0000012F B402                    mov	ah, 2	; set cursor position
   263 00000131 30FF                    xor	bh, bh
   264                                  ;int	10h	; - VIDEO - SET	CURSOR POSITION
   265                                  		; DH,DL	= row, column (0,0 = upper left)
   266                                  		; BH = page number
   267 00000133 CD31                    int	31h  ; TRDOS 386 - VIDEO Interrupt
   268 00000135 AC                      lodsb
   269                                  loc_101D4:
   270                                  ;mov	[word_101E0], si
   271 00000136 8935[45010000]          mov	[word_101E0], esi
   272 0000013C 66BB2200                mov	bx, 22h
   273 00000140 B40E                    mov	ah, 0Eh	; write tty
   274                                  ;int	10h	; - VIDEO - WRITE CHARACTER AND	ADVANCE	CURSOR (TTY WRITE)
   275                                  		; AL = character, BH = display page (alpha modes)
   276                                  		; BL = foreground color	(graphics modes)
   277 00000142 CD31                    int	31h  ; TRDOS 386 - VIDEO Interrupt
   278                                  locret_101DF:
   279 00000144 C3                      retn
   280                                  
   281                                  ;word_101E0: dw 1E2h
   282 00000145 [49010000]              word_101E0: dd loc_1E2
   283                                  loc_1E2:
   284 00000149 04                      db    4
   285 0000014A 0F                      db  0Fh
   286 0000014B 20                      db  20h
   287 0000014C 20                      db  20h
   288 0000014D 20                      db  20h
   289 0000014E 47                      db  47h	; G
   290 0000014F EE                      db 0EEh	; 
   291 00000150 43                      db  43h	; C
   292 00000151 EE                      db 0EEh	; 
   293 00000152 20                      db  20h
   294 00000153 20                      db  20h
   295 00000154 20                      db  20h
   296 00000155 05                      db    5
   297 00000156 0F                      db  0Fh
   298 00000157 20                      db  20h
   299 00000158 20                      db  20h
   300 00000159 4D                      db  4Dh	; M
   301 0000015A 92                      db  92h	; 
   302 0000015B 56                      db  56h	; V
   303 0000015C AD                      db 0ADh	; 
   304 0000015D 53                      db  53h	; S
   305 0000015E AD                      db 0ADh	; 
   306 0000015F 20                      db  20h
   307 00000160 20                      db  20h
   308 00000161 06                      db    6
   309 00000162 0C                      db  0Ch
   310 00000163 20                      db  20h
   311 00000164 20                      db  20h
   312 00000165 20                      db  20h
   313 00000166 20                      db  20h
   314 00000167 43                      db  43h	; C
   315 00000168 41                      db  41h	; A
   316 00000169 4C                      db  4Ch	; L
   317 0000016A 4C                      db  4Ch	; L
   318 0000016B 20                      db  20h
   319 0000016C 4E                      db  4Eh	; N
   320 0000016D 4F                      db  4Fh	; O
   321 0000016E 57                      db  57h	; W
   322 0000016F 20                      db  20h
   323 00000170 20                      db  20h
   324 00000171 20                      db  20h
   325 00000172 20                      db  20h
   326 00000173 07                      db    7
   327 00000174 0C                      db  0Ch
   328 00000175 2B                      db  2Bh	; +
   329 00000176 39                      db  39h	; 9
   330 00000177 30                      db  30h	; 0
   331 00000178 2D                      db  2Dh	; -
   332 00000179 32                      db  32h	; 2
   333 0000017A 31                      db  31h	; 1
   334 0000017B 36                      db  36h	; 6
   335 0000017C 2D                      db  2Dh	; -
   336 0000017D 33                      db  33h	; 3
   337 0000017E 31                      db  31h	; 1
   338 0000017F 35                      db  35h	; 5
   339 00000180 2D                      db  2Dh	; -
   340 00000181 32                      db  32h	; 2
   341 00000182 32                      db  32h	; 2
   342 00000183 33                      db  33h	; 3
   343 00000184 33                      db  33h	; 3
   344 00000185 20                      db  20h
   345 00000186 20                      db  20h
   346                                  loc_220:
   347 00000187 04                      db    4
   348 00000188 13                      db  13h
   349 00000189 45                      db  45h	; E
   350 0000018A 43                      db  43h	; C
   351 0000018B 45                      db  45h	; E
   352 0000018C 20                      db  20h
   353 0000018D 20                      db  20h
   354 0000018E 20                      db  20h
   355 0000018F 04                      db    4
   356 00000190 13                      db  13h
   357 00000191 65                      db  65h	; e
   358 00000192 43                      db  43h	; C
   359 00000193 65                      db  65h	; e
   360 00000194 20                      db  20h
   361 00000195 04                      db    4
   362 00000196 13                      db  13h
   363 00000197 EE                      db 0EEh	; 
   364 00000198 43                      db  43h	; C
   365 00000199 EE                      db 0EEh	; 
   366 0000019A 20                      db  20h
   367 0000019B 20                      db  20h
   368 0000019C 20                      db  20h
   369 0000019D 00                      db    0
   370                                  loc_237:
   371 0000019E E0                      db 0E0h	; 
   372 0000019F 20                      db  20h
   373 000001A0 21                      db  21h	; !
   374 000001A1 00                      db    0
   375 000001A2 C3                      db 0C3h	; +
   376 000001A3 B6                      db 0B6h	; 
   377 000001A4 F5                      db 0F5h	; 
   378 000001A5 F6                      db 0F6h	; 
   379 000001A6 03                      db    3
   380 000001A7 03                      db    3
   381 000001A8 02                      db    2
   382                                  loc_242:
   383 000001A9 40                      db  40h	; @
   384 000001AA 00                      db    0
   385 000001AB 00                      db    0
   386 000001AC 00                      db    0
   387 000001AD FA                      db 0FAh	; 
   388 000001AE D9                      db 0D9h	; -
   389 000001AF 37                      db  37h	; 7
   390 000001B0 04                      db    4
   391 000001B1 00                      db    0
   392 000001B2 00                      db    0
   393 000001B3 00                      db    0
   394                                  loc_24D:
   395 000001B4 80                      db  80h ; 
   396 000001B5 84                      db  84h ; 
   397                                  loc_24F:
   398 000001B6 FC                      db 0FCh ; 
   399 000001B7 08                      db    8
   400 000001B8 99                      db  99h ; 
   401 000001B9 21                      db  21h ; !
   402 000001BA A5                      db 0A5h ; 
   403 000001BB 1E                      db  1Eh
   404 000001BC 99                      db  99h ; 
   405 000001BD 1B                      db  1Bh
   406 000001BE A3                      db 0A3h ; 
   407 000001BF 18                      db  18h
   408 000001C0 A5                      db 0A5h ; 
   409 000001C1 15                      db  15h
   410 000001C2 99                      db  99h ; 
   411 000001C3 21                      db  21h ; !
   412 000001C4 A5                      db 0A5h ; 
   413 000001C5 28                      db  28h ; (
   414 000001C6 99                      db  99h ; 
   415 000001C7 2F                      db  2Fh ; /
   416 000001C8 7D                      db  7Dh ; }
   417 000001C9 FE                      db 0FEh ; 
   418                                  loc_263:
   419 000001CA FC                      db 0FCh ; 
   420 000001CB 04                      db    4
   421 000001CC 80                      db  80h ; 
   422 000001CD C0                      db 0C0h ; L
   423 000001CE 7D                      db  7Dh ; }
   424 000001CF FC                      db 0FCh ; 
   425 000001D0 10                      db  10h
   426 000001D1 8D                      db  8Dh ; 
   427 000001D2 90                      db  90h ; 
   428 000001D3 7D                      db  7Dh ; }
   429 000001D4 FE                      db 0FEh ; 
   430                                  loc_26E:
   431                                  ;db  4Fh ; O
   432                                  ;db    2
   433 000001D5 [B6010000]              dd  loc_24F
   434                                  ;db  4Fh ; O
   435                                  ;db    2
   436 000001D9 [B6010000]              dd  loc_24F
   437                                  ;db  63h ; c
   438                                  ;db    2
   439 000001DD [CA010000]              dd  loc_263	
   440                                  loc_274:
   441                                  ;db  4Fh ; O
   442                                  ;db    2
   443 000001E1 [B6010000]              dd  loc_24F    		
   444                                  ;db  4Dh ; M
   445                                  ;db    2
   446 000001E5 [B4010000]              dd  loc_24D 	
   447                                  ;db  63h ; c
   448                                  ;db    2
   449 000001E9 [CA010000]              dd  loc_263
   450                                  
   451                                  sub_1027A:
   452 000001ED 8035[78030000]01        xor     byte [byte_10393], 1
   453 000001F4 750E                    jnz	short locret_1028C
   454 000001F6 31FF                    xor	edi, edi
   455                                  
   456                                  loc_10283:
   457 000001F8 E808000000              call	sub_1028D
   458 000001FD 47                      inc	edi
   459                                  ;cmp	edi, 3
   460 000001FE 6683FF03                cmp	di, 3
   461 00000202 75F4                    jne	short loc_10283
   462                                  locret_1028C:
   463 00000204 C3                      retn
   464                                  
   465                                  sub_1028D:
   466 00000205 89FB                    mov	ebx, edi
   467                                  ;shl	bx, 1
   468 00000207 66C1E302                shl	bx, 2
   469                                  ;mov	si, [bx+274h]
   470 0000020B 8BB3[E1010000]          mov	esi, [ebx+loc_274]
   471                                  ;dec	byte [di+394h]
   472 00000211 FE8F[79030000]          dec	byte [edi+loc_394]
   473 00000217 75EB                    jnz	short locret_1028C
   474                                  ;mov	byte [di+394h], 8
   475 00000219 C687[79030000]08        mov	byte [edi+loc_394], 8
   476                                  
   477                                  loc_102A0:
   478 00000220 AC                      lodsb
   479 00000221 3C7D                    cmp	al, 7Dh
   480 00000223 7511                    jne	short loc_102B1
   481                                  ;dec	byte [edi+3A0h]
   482 00000225 FE8F[B9030000]          dec	byte [edi+_end+8] ; 3A3h = _end + 11
   483 0000022B 74F3                    jz	short loc_102A0
   484                                  ;mov	si, [bx+39Ah]
   485                                  ;movzx	esi, word [ebx+_end+2] ; 39Ah = _end + 11 - 9
   486 0000022D 668BB3[B3030000]        mov	si, [ebx+_end+2]
   487 00000234 EBEA                    jmp	short loc_102A0
   488                                  
   489                                  loc_102B1:
   490 00000236 3CFC                    cmp	al, 0FCh
   491 00000238 7510                    jne	short loc_102C0
   492 0000023A AC                      lodsb
   493                                  ;mov	[di+3A0h], al
   494 0000023B 8887[B9030000]          mov	byte [edi+_end+8], al
   495                                  ;mov	[bx+39Ah], si
   496 00000241 6689B3[B3030000]        mov	[ebx+_end+2], si
   497 00000248 EBD6                    jmp	short loc_102A0
   498                                  
   499                                  loc_102C0:
   500 0000024A 3CFE                    cmp	al, 0FEh
   501 0000024C 7508                    jne	short loc_102CA
   502                                  ;mov	si, [bx+26Eh]
   503 0000024E 8BB3[D5010000]          mov	esi, [ebx+loc_26E]
   504 00000254 EBCA                    jmp	short loc_102A0
   505                                  
   506                                  loc_102CA:
   507 00000256 6650                    push	ax
   508 00000258 AC                      lodsb
   509 00000259 D0C0                    rol	al, 1
   510 0000025B D0E8                    shr	al, 1
   511 0000025D 7308                    jnb	short loc_102D8
   512                                  ;mov	[di+394h], al
   513 0000025F 8887[79030000]          mov	[edi+loc_394], al
   514 00000265 EB09                    jmp	short loc_102DF
   515                                  
   516                                  loc_102D8:
   517 00000267 88C4                    mov	ah, al
   518 00000269 B040                    mov	al, 40h
   519 0000026B E8A8000000              call	sub_10358
   520                                  
   521                                  loc_102DF:
   522 00000270 6658                    pop	ax
   523 00000272 247F                    and	al, 7Fh
   524 00000274 7446                    jz	short loc_10318
   525 00000276 6650                    push	ax
   526                                  ;mov	ah, [di+397h]
   527 00000278 8AA7[7C030000]          mov	ah, [edi+loc_397]
   528 0000027E B0B0                    mov	al, 0B0h
   529 00000280 E893000000              call	sub_10358
   530 00000285 6658                    pop	ax
   531 00000287 FEC8                    dec	al
   532 00000289 30E4                    xor	ah, ah
   533 0000028B B30C                    mov	bl, 0Ch
   534 0000028D F6F3                    div	bl
   535                                  ;movzx	ebx, ax
   536 0000028F 6689C3                  mov	bx, ax
   537 00000292 66C1EB07                shr	bx, 7
   538 00000296 66C1E00A                shl	ax, 0Ah
   539                                  ;or	ax, [bx+370h]
   540 0000029A 660B83[55030000]        or	ax, [ebx+loc_370]
   541                                  ;mov	[di+397h], ah
   542 000002A1 88A7[7C030000]          mov	[edi+loc_397], ah
   543 000002A7 80CC20                  or	ah, 20h
   544 000002AA 88C3                    mov	bl, al
   545 000002AC B0B0                    mov	al, 0B0h
   546 000002AE E865000000              call	sub_10358
   547 000002B3 B0A0                    mov	al, 0A0h
   548 000002B5 88DC                    mov	ah, bl
   549 000002B7 E85C000000              call	sub_10358
   550                                  
   551                                  loc_10318:
   552                                  ;shl	di, 1
   553 000002BC 66C1E702                shl	di, 2
   554                                  ;mov	[di+274h], si
   555 000002C0 89B7[E1010000]          mov	[edi+loc_274], esi
   556                                  ;shr	di, 1
   557 000002C6 66C1EF02                shr	di, 2
   558 000002CA C3                      retn
   559                                  
   560                                  sub_10321:
   561 000002CB 66B80120                mov	ax, 2001h
   562 000002CF E847000000              call	sub_1035A
   563 000002D4 66B80800                mov	ax, 8
   564 000002D8 E83E000000              call	sub_1035A
   565 000002DD 66B8BDC0                mov	ax, 0C0BDh
   566 000002E1 E835000000              call	sub_1035A
   567 000002E6 31FF                    xor	edi, edi
   568                                  ;mov	si, 237h
   569 000002E8 BE[9E010000]            mov	esi, loc_237
   570 000002ED E80E000000              call	sub_10345
   571 000002F2 C6460308                mov	byte [esi+3], 8
   572 000002F6 E805000000              call	sub_10345
   573                                  ;mov	si, 242h
   574 000002FB BE[A9010000]            mov	esi, loc_242
   575                                  
   576                                  sub_10345:
   577 00000300 31DB                    xor	ebx, ebx
   578                                  loc_10347:
   579                                  ;mov	al, [bx+388h]
   580 00000302 8A83[6D030000]          mov	al, [ebx+loc_388]
   581 00000308 8A2433                  mov	ah, [ebx+esi]
   582 0000030B E808000000              call	sub_10358
   583 00000310 43                      inc	ebx
   584 00000311 83FB0B                  cmp	ebx, 0Bh
   585 00000314 72EC                    jb	short loc_10347
   586 00000316 47                      inc	edi
   587 00000317 C3                      retn
   588                                  
   589                                  sub_10358:
   590 00000318 6601F8                  add	ax, di
   591                                  
   592                                  sub_1035A:
   593 0000031B 6650                    push	ax
   594 0000031D 66BA8803                mov	dx, 388h
   595                                  ;out	dx, al
   596                                  ; TRDOS 386 - IOCTL Interrupt (for ring 3)
   597 00000321 B401                    mov	ah, 1 ; out (byte)
   598                                  ; al = data byte
   599                                  ; dx = port number
   600 00000323 CD34                    int	34h ; TRDOS 386 - IOCTL
   601                                  ;in	al, dx
   602                                  ;in	al, dx
   603                                  ;in	al, dx
   604                                  ;in	al, dx
   605                                  ;out	dx, al
   606                                  ; TRDOS 386 - IOCTL Interrupt (for ring 3)
   607 00000325 B400                    mov	ah, 0 ; in (byte)
   608                                  ; al = data byte
   609                                  ; dx = port number
   610 00000327 CD34                    int	34h ; TRDOS 386 - IOCTL 
   611 00000329 6658                    pop	ax
   612 0000032B FEC2                    inc	dl
   613 0000032D 88E0                    mov	al, ah
   614                                  ;out	dx, al
   615                                  ; TRDOS 386 - IOCTL Interrupt (for ring 3)
   616 0000032F B401                    mov	ah, 1 ; out (byte)
   617                                  ; al = data byte
   618                                  ; dx = port number
   619 00000331 CD34                    int	34h ; TRDOS 386 - IOCTL
   620 00000333 FECA                    dec	dl
   621 00000335 B914000000              mov	ecx, 14h
   622                                  loc_1036C:
   623                                  ;in	al, dx
   624                                  ; TRDOS 386 - IOCTL Interrupt (for ring 3)
   625 0000033A B400                    mov	ah, 0 ; in (byte)
   626                                  ; al = data byte
   627                                  ; dx = port number
   628 0000033C CD34                    int	34h ; TRDOS 386 - IOCTL
   629 0000033E E2FA                    loop	loc_1036C
   630 00000340 C3                      retn
   631                                  
   632                                  print_msg:
   633 00000341 66BB0700                	mov	bx, 7
   634 00000345 B40E                            mov     ah, 0Eh
   635                                  pmsg_loop:
   636 00000347 AC                      	lodsb
   637 00000348 20C0                    	and	al, al
   638 0000034A 7404                    	jz	short pmsg_ok
   639 0000034C CD31                    	int	31h	; TRDOS 386 video interrupt
   640 0000034E EBF7                    	jmp	short pmsg_loop	
   641                                  pmsg_ok:
   642 00000350 B410                    	mov	ah, 10h ; Getchar
   643 00000352 CD32                    	int	32h	; TRDOS 386 keyboard interrupt
   644 00000354 C3                      	retn
   645                                  
   646                                  loc_370:
   647 00000355 57                      db  57h	; W
   648 00000356 01                      db    1
   649 00000357 6B                      db  6Bh	; k
   650 00000358 01                      db    1
   651 00000359 81                      db  81h	; 
   652 0000035A 01                      db    1
   653 0000035B 98                      db  98h	; 
   654 0000035C 01                      db    1
   655 0000035D B0                      db 0B0h	; -
   656 0000035E 01                      db    1
   657 0000035F CA                      db 0CAh	; 
   658 00000360 01                      db    1
   659 00000361 E5                      db 0E5h	; 
   660 00000362 01                      db    1
   661 00000363 02                      db    2
   662 00000364 02                      db    2
   663 00000365 20                      db  20h
   664 00000366 02                      db    2
   665 00000367 41                      db  41h	; A
   666 00000368 02                      db    2
   667 00000369 63                      db  63h	; c
   668 0000036A 02                      db    2
   669 0000036B 87                      db  87h	; 
   670 0000036C 02                      db    2
   671                                  loc_388:
   672 0000036D 20                      db  20h
   673 0000036E 23                      db  23h	; #
   674 0000036F 40                      db  40h	; @
   675 00000370 43                      db  43h	; C
   676 00000371 60                      db  60h	; `
   677 00000372 63                      db  63h	; c
   678 00000373 80                      db  80h	; 
   679 00000374 83                      db  83h	; 
   680 00000375 E0                      db 0E0h	; 
   681 00000376 E3                      db 0E3h	; 
   682 00000377 C0                      db 0C0h	; L
   683 00000378 00                      byte_10393: db 0
   684                                  loc_394:
   685 00000379 01                      db    1
   686 0000037A 01                      db    1
   687 0000037B 01                      db    1
   688                                  loc_397:
   689 0000037C 1A                      db  1Ah
   690                                  
   691 0000037D 00                      db 	0
   692                                  prg_msg:
   693 0000037E 4552444F47414E2054-     db	'ERDOGAN TAN - TRDOS 386 - RUNME.PRG'
   693 00000387 414E202D205452444F-
   693 00000390 5320333836202D2052-
   693 00000399 554E4D452E505247   
   694 000003A1 0D0A                    db	0Dh, 0Ah
   695 000003A3 32332F30372F323031-     db	'23/07/2016'
   695 000003AC 36                 
   696 000003AD 00                      db 	0
   697 000003AE [B103]                  dw	_end
   698 000003B0 00                      db	0 
   699                                  _end:
