1 ; **************************************************************************** 2 ; hello2.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'hello2.prg') 3 ; ---------------------------------------------------------------------------- 4 ; HELLO2.PRG ! TEST program ! INT 31h (Video BIOS) test ! 5 ; 6 ; 12/05/2016 7 ; 8 ; Derived from 'hello.s' source code for Retro UNIX 386 v1 & TRDOS 386 9 ; 10 ; [ Last Modification: 13/05/2016 ] 11 ; 12 ; **************************************************************************** 13 ; 14 ; hello.s (01/05/2016, TRDOS v2.0) 15 ; hello.s (28/08/2015, Retro UNIX 386 v1, NASM 2.11, 32 bit version) 16 ; HELLO.ASM, 18/11/2013 (Retro UNIX 8086 v1, MASM 6.11) 17 18 ; 29/04/2016 19 ; TRDOS 386 system calls (temporary list!) 20 _ver equ 0 21 _exit equ 1 22 _fork equ 2 23 _read equ 3 24 _write equ 4 25 _open equ 5 26 _close equ 6 27 _wait equ 7 28 _creat equ 8 29 _link equ 9 30 _unlink equ 10 31 _exec equ 11 32 _chdir equ 12 33 _time equ 13 34 _mkdir equ 14 35 _chmod equ 15 36 _chown equ 16 37 _break equ 17 38 _stat equ 18 39 _seek equ 19 40 _tell equ 20 41 _mount equ 21 42 _umount equ 22 43 _setuid equ 23 44 _getuid equ 24 45 _stime equ 25 46 _quit equ 26 47 _intr equ 27 48 _fstat equ 28 49 _emt equ 29 50 _mdate equ 30 51 _stty equ 31 52 _gtty equ 32 53 _ilgins equ 33 54 _sleep equ 34 55 _msg equ 35 56 57 %macro sys 1-4 58 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 59 ; 03/09/2015 60 ; 13/04/2015 61 ; Retro UNIX 386 v1 system call. 62 %if %0 >= 2 63 mov ebx, %2 64 %if %0 >= 3 65 mov ecx, %3 66 %if %0 = 4 67 mov edx, %4 68 %endif 69 %endif 70 %endif 71 mov eax, %1 72 ;int 30h 73 int 40h ; TRDOS 386 (TRDOS v2.0) 74 %endmacro 75 76 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 77 ; sys systemcall (eax) , , 78 79 [BITS 32] ; We need 32-bit intructions for protected mode 80 81 [ORG 0] 82 83 START_CODE: 84 ;mov eax, 417 85 ;int 30h ; 'INVALID SYSTEM CALL' test! 86 ; 87 sys _ver ; get TRDOS version ; INT 40h 87 <1> 87 <1> 87 <1> 87 <1> 87 <1> %if %0 >= 2 87 <1> mov ebx, %2 87 <1> %if %0 >= 3 87 <1> mov ecx, %3 87 <1> %if %0 = 4 87 <1> mov edx, %4 87 <1> %endif 87 <1> %endif 87 <1> %endif 87 00000000 B800000000 <1> mov eax, %1 87 <1> 87 00000005 CD40 <1> int 40h 88 00000007 66053030 add ax, '00' 89 0000000B 8825[7F000000] mov [ver_str_major], ah 90 00000011 A2[81000000] mov [ver_str_minor], al 91 92 sys _msg, msg_Hello, msg_size, msg_color ; INT 40h 92 <1> 92 <1> 92 <1> 92 <1> 92 <1> %if %0 >= 2 92 00000016 BB[4F000000] <1> mov ebx, %2 92 <1> %if %0 >= 3 92 0000001B B956000000 <1> mov ecx, %3 92 <1> %if %0 = 4 92 00000020 BA0A000000 <1> mov edx, %4 92 <1> %endif 92 <1> %endif 92 <1> %endif 92 00000025 B823000000 <1> mov eax, %1 92 <1> 92 0000002A CD40 <1> int 40h 93 94 0000002C BE[A6000000] mov esi, msg_int31h 95 00000031 E809000000 call print_msg ; INT 31h 96 97 sys _exit ; INT 40h 97 <1> 97 <1> 97 <1> 97 <1> 97 <1> %if %0 >= 2 97 <1> mov ebx, %2 97 <1> %if %0 >= 3 97 <1> mov ecx, %3 97 <1> %if %0 = 4 97 <1> mov edx, %4 97 <1> %endif 97 <1> %endif 97 <1> %endif 97 00000036 B801000000 <1> mov eax, %1 97 <1> 97 0000003B CD40 <1> int 40h 98 here: 99 0000003D EBFE jmp short here 100 101 print_msg: 102 0000003F BB0E000000 mov ebx, 0Eh ; yellow characters (bl) 103 ; video page 0 (bh) 104 ;mov ah, 0Eh ; teletype output (write tty) 105 00000044 88DC mov ah, bl 106 00000046 AC lodsb 107 _1: 108 00000047 CD31 int 31h 109 00000049 AC lodsb 110 0000004A 20C0 and al, al 111 0000004C 75F9 jnz short _1 112 _2: 113 0000004E C3 retn 114 115 ;----------------------------------------------------------------- 116 ; message 117 ;----------------------------------------------------------------- 118 119 msg_color equ 0Ah ; ligth green 120 121 0000004F 07 msg_Hello: db 07h ; beep 122 00000050 0D0A db 0Dh, 0Ah 123 00000052 48656C6C6F20776F72- db 'Hello world !' 123 0000005B 6C642021 124 0000005F 0D0A db 0Dh, 0Ah 125 00000061 546869732069732054- db 'This is Turkish Rational DOS v' 125 0000006A 75726B697368205261- 125 00000073 74696F6E616C20444F- 125 0000007C 532076 126 0000007F 30 ver_str_major: db '0' 127 00000080 2E db '.' 128 00000081 30 ver_str_minor: db '0' 129 00000082 20746573742070726F- db ' test program ! (INT 40h, sysmsg)' 129 0000008B 6772616D2021202849- 129 00000094 4E54203430682C2073- 129 0000009D 79736D736729 130 000000A3 0D0A db 0Dh, 0Ah 131 msg_size equ $ - msg_Hello 132 000000A5 00 db 0 133 msg_int31h: 134 000000A6 2854686973206D6573- db '(This message has been written by using INT 31h teletype function!)' 134 000000AF 736167652068617320- 134 000000B8 6265656E2077726974- 134 000000C1 74656E206279207573- 134 000000CA 696E6720494E542033- 134 000000D3 31682074656C657479- 134 000000DC 70652066756E637469- 134 000000E5 6F6E2129 135 000000E9 0D0A00 db 0Dh, 0Ah, 0