     1                                  ; ****************************************************************************
     2                                  ; hello.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'hello.prg')
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; HELLO.PRG ! TEST program !
     5                                  ;
     6                                  ; 29/04/2016
     7                                  ;
     8                                  ; Derived from 'hello.s' source code for Retro UNIX 386 v1
     9                                  ;
    10                                  ; [ Last Modification: 01/05/2016 ]
    11                                  ;
    12                                  ; ****************************************************************************
    13                                  ;
    14                                  ; hello.s (28/08/2015, Retro UNIX 386 v1, NASM 2.11, 32 bit version)
    15                                  ; HELLO.ASM, 18/11/2013 (Retro UNIX 8086 v1, MASM 6.11) 
    16                                  
    17                                  ; 29/04/2016
    18                                  ; TRDOS 386 system calls (temporary list!)
    19                                  _ver 	equ 0
    20                                  _exit 	equ 1
    21                                  _fork 	equ 2
    22                                  _read 	equ 3
    23                                  _write	equ 4
    24                                  _open	equ 5
    25                                  _close 	equ 6
    26                                  _wait 	equ 7
    27                                  _creat 	equ 8
    28                                  _link 	equ 9
    29                                  _unlink	equ 10
    30                                  _exec	equ 11
    31                                  _chdir	equ 12
    32                                  _time 	equ 13
    33                                  _mkdir 	equ 14
    34                                  _chmod	equ 15
    35                                  _chown	equ 16
    36                                  _break	equ 17
    37                                  _stat	equ 18
    38                                  _seek	equ 19
    39                                  _tell 	equ 20
    40                                  _mount	equ 21
    41                                  _umount	equ 22
    42                                  _setuid	equ 23
    43                                  _getuid	equ 24
    44                                  _stime	equ 25
    45                                  _quit	equ 26	
    46                                  _intr	equ 27
    47                                  _fstat	equ 28
    48                                  _emt 	equ 29
    49                                  _mdate 	equ 30
    50                                  _stty 	equ 31
    51                                  _gtty	equ 32
    52                                  _ilgins	equ 33
    53                                  _sleep	equ 34
    54                                  _msg    equ 35
    55                                  
    56                                  %macro sys 1-4
    57                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    58                                      ; 03/09/2015	
    59                                      ; 13/04/2015
    60                                      ; Retro UNIX 386 v1 system call.		
    61                                      %if %0 >= 2   
    62                                          mov ebx, %2
    63                                          %if %0 >= 3    
    64                                              mov ecx, %3
    65                                              %if %0 = 4
    66                                                 mov edx, %4   
    67                                              %endif
    68                                          %endif
    69                                      %endif
    70                                      mov eax, %1
    71                                      ;int 30h
    72                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    73                                  %endmacro
    74                                  
    75                                  ; TRDOS 386 (and Retro UNIX 386 v1) system call format:
    76                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    77                                  
    78                                  [BITS 32] ; We need 32-bit intructions for protected mode
    79                                  
    80                                  [ORG 0] 
    81                                  
    82                                  START_CODE:
    83                                  	;mov	eax, 417
    84                                  	;int	30h ; 'INVALID SYSTEM CALL' test!
    85                                  	;
    86                                  	sys 	_ver ; get TRDOS version
    86                              <1> 
    86                              <1> 
    86                              <1> 
    86                              <1> 
    86                              <1>  %if %0 >= 2
    86                              <1>  mov ebx, %2
    86                              <1>  %if %0 >= 3
    86                              <1>  mov ecx, %3
    86                              <1>  %if %0 = 4
    86                              <1>  mov edx, %4
    86                              <1>  %endif
    86                              <1>  %endif
    86                              <1>  %endif
    86 00000000 B800000000          <1>  mov eax, %1
    86                              <1> 
    86 00000005 CD40                <1>  int 40h
    87 00000007 66053030                	add	ax, '00'
    88 0000000B 8825[70000000]          	mov	[ver_str_major], ah
    89 00000011 A2[72000000]            	mov	[ver_str_minor], al
    90                                  	
    91                                  	sys	_msg, msg_Hello, msg_size, msg_color
    91                              <1> 
    91                              <1> 
    91                              <1> 
    91                              <1> 
    91                              <1>  %if %0 >= 2
    91 00000016 BB[35000000]        <1>  mov ebx, %2
    91                              <1>  %if %0 >= 3
    91 0000001B B942000000          <1>  mov ecx, %3
    91                              <1>  %if %0 = 4
    91 00000020 BA0A000000          <1>  mov edx, %4
    91                              <1>  %endif
    91                              <1>  %endif
    91                              <1>  %endif
    91 00000025 B823000000          <1>  mov eax, %1
    91                              <1> 
    91 0000002A CD40                <1>  int 40h
    92                                  	sys 	_exit
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1>  %if %0 >= 2
    92                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    92                              <1>  mov ecx, %3
    92                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    92                              <1>  %endif
    92                              <1>  %endif
    92                              <1>  %endif
    92 0000002C B801000000          <1>  mov eax, %1
    92                              <1> 
    92 00000031 CD40                <1>  int 40h
    93                                  here:
    94 00000033 EBFE                    	jmp	short here
    95                                  
    96                                  ;-----------------------------------------------------------------
    97                                  ;  message
    98                                  ;-----------------------------------------------------------------
    99                                  
   100                                  msg_color	equ 0Ah ; ligth green
   101                                  
   102 00000035 07                      msg_Hello:	db 07h ; beep
   103 00000036 0D0A                    		db 0Dh, 0Ah
   104 00000038 48656C6C6F20776F72-     		db 'Hello world !'
   104 00000041 6C642021           
   105 00000045 0D0A                    		db 0Dh, 0Ah
   106 00000047 546869732069732074-     		db 'This is the first program for TRDOS 386 v'
   106 00000050 686520666972737420-
   106 00000059 70726F6772616D2066-
   106 00000062 6F72205452444F5320-
   106 0000006B 3338362076         
   107 00000070 30                      ver_str_major:	db '0'
   108 00000071 2E                      		db '.'
   109 00000072 30                      ver_str_minor:  db '0'
   110 00000073 2021                    		db ' !'
   111 00000075 0D0A                    		db 0Dh, 0Ah,
   112                                  msg_size equ    $ - msg_Hello
   113 00000077 00                      		db 0
