     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) <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 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:
