     1                                  ; ****************************************************************************
     2                                  ; args386.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'args386.prg')
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; ARGS386.PRG ! TEST program !
     5                                  ;
     6                                  ; 09/05/2016
     7                                  ;
     8                                  ; Derived from 'args386.s' source code for Retro UNIX 386 v1
     9                                  ;
    10                                  ; [ Last Modification: 11/05/2016 ]
    11                                  ;
    12                                  ; ****************************************************************************
    13                                  ; args386.s (11/10/2015, Retro UNIX 386 v1, NASM 2.11)
    14                                  
    15                                  ; 29/04/2016
    16                                  ; TRDOS 386 system calls (temporary list!)
    17                                  _ver 	equ 0
    18                                  _exit 	equ 1
    19                                  _fork 	equ 2
    20                                  _read 	equ 3
    21                                  _write	equ 4
    22                                  _open	equ 5
    23                                  _close 	equ 6
    24                                  _wait 	equ 7
    25                                  _creat 	equ 8
    26                                  _link 	equ 9
    27                                  _unlink	equ 10
    28                                  _exec	equ 11
    29                                  _chdir	equ 12
    30                                  _time 	equ 13
    31                                  _mkdir 	equ 14
    32                                  _chmod	equ 15
    33                                  _chown	equ 16
    34                                  _break	equ 17
    35                                  _stat	equ 18
    36                                  _seek	equ 19
    37                                  _tell 	equ 20
    38                                  _mount	equ 21
    39                                  _umount	equ 22
    40                                  _setuid	equ 23
    41                                  _getuid	equ 24
    42                                  _stime	equ 25
    43                                  _quit	equ 26	
    44                                  _intr	equ 27
    45                                  _fstat	equ 28
    46                                  _emt 	equ 29
    47                                  _mdate 	equ 30
    48                                  _stty 	equ 31
    49                                  _gtty	equ 32
    50                                  _ilgins	equ 33
    51                                  _sleep	equ 34
    52                                  _msg    equ 35
    53                                  
    54                                  %macro sys 1-4
    55                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    56                                      ; 03/09/2015	
    57                                      ; 13/04/2015
    58                                      ; Retro UNIX 386 v1 system call.		
    59                                      %if %0 >= 2   
    60                                          mov ebx, %2
    61                                          %if %0 >= 3    
    62                                              mov ecx, %3
    63                                              %if %0 = 4
    64                                                 mov edx, %4   
    65                                              %endif
    66                                          %endif
    67                                      %endif
    68                                      mov eax, %1
    69                                      ;int 30h
    70                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    71                                  %endmacro
    72                                  
    73                                  ; Retro UNIX 386 v1 system call format:
    74                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    75                                  
    76                                  [BITS 32] ; We need 32-bit intructions for protected mode
    77                                  
    78                                  [ORG 0] 
    79                                  
    80                                  START_CODE:
    81                                  	sys _msg, version, 255, 0Ah
    82                              <1> 
    83                              <1> 
    84                              <1> 
    85                              <1> 
    86                              <1>  %if %0 >= 2
    87 00000000 BB[7F000000]        <1>  mov ebx, %2
    88                              <1>  %if %0 >= 3
    89 00000005 B9FF000000          <1>  mov ecx, %3
    90                              <1>  %if %0 = 4
    91 0000000A BA0A000000          <1>  mov edx, %4
    92                              <1>  %endif
    93                              <1>  %endif
    94                              <1>  %endif
    95 0000000F B823000000          <1>  mov eax, %1
    96                              <1> 
    97 00000014 CD40                <1>  int 40h
    98 00000016 89E6                    	mov esi, esp
    99 00000018 AD                      	lodsd
   100 00000019 21C0                    	and eax, eax
   101 0000001B 744B                    	jz  short terminate
   102 0000001D 89C5                    	mov ebp, eax
   103                                  nextarg:
   104 0000001F FE05[7B000000]          	inc byte [argn]
   105                                  	sys _msg, args, 255, 0Eh
   106                              <1> 
   107                              <1> 
   108                              <1> 
   109                              <1> 
   110                              <1>  %if %0 >= 2
   111 00000025 BB[71000000]        <1>  mov ebx, %2
   112                              <1>  %if %0 >= 3
   113 0000002A B9FF000000          <1>  mov ecx, %3
   114                              <1>  %if %0 = 4
   115 0000002F BA0E000000          <1>  mov edx, %4
   116                              <1>  %endif
   117                              <1>  %endif
   118                              <1>  %endif
   119 00000034 B823000000          <1>  mov eax, %1
   120                              <1> 
   121 00000039 CD40                <1>  int 40h
   122 0000003B AD                      	lodsd
   123                                  	sys _msg, eax, 255, 0Fh
   124                              <1> 
   125                              <1> 
   126                              <1> 
   127                              <1> 
   128                              <1>  %if %0 >= 2
   129 0000003C 89C3                <1>  mov ebx, %2
   130                              <1>  %if %0 >= 3
   131 0000003E B9FF000000          <1>  mov ecx, %3
   132                              <1>  %if %0 = 4
   133 00000043 BA0F000000          <1>  mov edx, %4
   134                              <1>  %endif
   135                              <1>  %endif
   136                              <1>  %endif
   137 00000048 B823000000          <1>  mov eax, %1
   138                              <1> 
   139 0000004D CD40                <1>  int 40h
   140 0000004F 4D                      	dec ebp
   141 00000050 75CD                    	jnz short nextarg
   142                                  	sys _msg, nexline, 2, 07h
   143                              <1> 
   144                              <1> 
   145                              <1> 
   146                              <1> 
   147                              <1>  %if %0 >= 2
   148 00000052 BB[C4000000]        <1>  mov ebx, %2
   149                              <1>  %if %0 >= 3
   150 00000057 B902000000          <1>  mov ecx, %3
   151                              <1>  %if %0 = 4
   152 0000005C BA07000000          <1>  mov edx, %4
   153                              <1>  %endif
   154                              <1>  %endif
   155                              <1>  %endif
   156 00000061 B823000000          <1>  mov eax, %1
   157                              <1> 
   158 00000066 CD40                <1>  int 40h
   159                                  terminate: 
   160                                  	sys _exit
   161                              <1> 
   162                              <1> 
   163                              <1> 
   164                              <1> 
   165                              <1>  %if %0 >= 2
   166                              <1>  mov ebx, %2
   167                              <1>  %if %0 >= 3
   168                              <1>  mov ecx, %3
   169                              <1>  %if %0 = 4
   170                              <1>  mov edx, %4
   171                              <1>  %endif
   172                              <1>  %endif
   173                              <1>  %endif
   174 00000068 B801000000          <1>  mov eax, %1
   175                              <1> 
   176 0000006D CD40                <1>  int 40h
   177                                  halt:
   178 0000006F EBFE                    	jmp short halt
   179                                  args:
   180 00000071 0D0A                    	db 0Dh, 0Ah
   181 00000073 417267756D656E74        	db 'Argument'
   182                                  argn:
   183 0000007B 30                      	db '0'
   184 0000007C 3A20                    	db ': '
   185 0000007E 00                      	db 0
   186                                  version:
   187 0000007F 0D0A                    	db 0Dh, 0Ah
   188 00000081 5452444F5320333836-     	db 'TRDOS 386 - Argument List Test Program'
   189 0000008A 202D20417267756D65-
   190 00000093 6E74204C6973742054-
   191 0000009C 6573742050726F6772-
   192 000000A5 616D               
   193 000000A7 0D0A                    	db 0Dh, 0Ah
   194 000000A9 6279204572646F6761-     	db 'by Erdogan Tan - 09/05/2016'
   195 000000B2 6E2054616E202D2030-
   196 000000BB 392F30352F32303136 
   197                                  nexline:
   198 000000C4 0D0A00                  	db 0Dh, 0Ah, 0
