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