1 ; **************************************************************************** 2 ; pushtest.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'pushtest.prg') 3 ; ---------------------------------------------------------------------------- 4 ; PUSHTEST.PRG ! TEST program ! 5 ; 6 ; 10/08/2016 7 ; 8 ; **************************************************************************** 9 10 ; 01/03/2017 11 ; 16/10/2016 12 ; 29/04/2016 13 ; TRDOS 386 system calls (temporary list!) 14 _ver equ 0 15 _exit equ 1 16 _fork equ 2 17 _read equ 3 18 _write equ 4 19 _open equ 5 20 _close equ 6 21 _wait equ 7 22 _creat equ 8 23 _link equ 9 24 _unlink equ 10 25 _exec equ 11 26 _chdir equ 12 27 _time equ 13 28 _mkdir equ 14 29 _chmod equ 15 30 _chown equ 16 31 _break equ 17 32 _stat equ 18 33 _seek equ 19 34 _tell equ 20 35 _mount equ 21 36 _umount equ 22 37 _setuid equ 23 38 _getuid equ 24 39 _stime equ 25 40 _quit equ 26 41 _intr equ 27 42 _fstat equ 28 43 _emt equ 29 44 _mdate equ 30 45 _video equ 31 46 _audio equ 32 47 _timer equ 33 48 _sleep equ 34 49 _msg equ 35 50 _geterr equ 36 51 _fpsave equ 37 52 _pri equ 38 53 _rele equ 39 54 _fff equ 40 55 _fnf equ 41 56 _alloc equ 42 57 _dalloc equ 43 58 _calbac equ 44 59 60 %macro sys 1-4 61 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 62 ; 03/09/2015 63 ; 13/04/2015 64 ; Retro UNIX 386 v1 system call. 65 %if %0 >= 2 66 mov ebx, %2 67 %if %0 >= 3 68 mov ecx, %3 69 %if %0 = 4 70 mov edx, %4 71 %endif 72 %endif 73 %endif 74 mov eax, %1 75 ;int 30h 76 int 40h ; TRDOS 386 (TRDOS v2.0) 77 %endmacro 78 79 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 80 ; sys systemcall (eax) , , 81 82 [BITS 32] ; We need 32-bit intructions for protected mode 83 84 [ORG 0] 85 86 START_CODE: 87 00000000 89E5 mov ebp, esp 88 00000002 6689EB mov bx, bp 89 00000005 6653 push bx 90 00000007 66391C24 cmp word [esp], bx 91 0000000B 7518 jne short _1 92 93 sys _msg, msg_ok1, 255, 0Fh 93 <1> 93 <1> 93 <1> 93 <1> 93 <1> %if %0 >= 2 93 0000000D BB[92010000] <1> mov ebx, %2 93 <1> %if %0 >= 3 93 00000012 B9FF000000 <1> mov ecx, %3 93 <1> %if %0 = 4 93 00000017 BA0F000000 <1> mov edx, %4 93 <1> %endif 93 <1> %endif 93 <1> %endif 93 0000001C B823000000 <1> mov eax, %1 93 <1> 93 00000021 CD40 <1> int 40h 94 95 00000023 EB16 jmp short _1_ok 96 _1: 97 sys _msg, msg_err1, 255, 0Fh 97 <1> 97 <1> 97 <1> 97 <1> 97 <1> %if %0 >= 2 97 00000025 BB[5E020000] <1> mov ebx, %2 97 <1> %if %0 >= 3 97 0000002A B9FF000000 <1> mov ecx, %3 97 <1> %if %0 = 4 97 0000002F BA0F000000 <1> mov edx, %4 97 <1> %endif 97 <1> %endif 97 <1> %endif 97 00000034 B823000000 <1> mov eax, %1 97 <1> 97 00000039 CD40 <1> int 40h 98 _1_ok: 99 0000003B 89EB mov ebx, ebp 100 0000003D 83EB04 sub ebx, 4 101 00000040 39E3 cmp ebx, esp 102 00000042 7518 jne short _2 103 104 sys _msg, msg_ok2, 255, 0Fh 104 <1> 104 <1> 104 <1> 104 <1> 104 <1> %if %0 >= 2 104 00000044 BB[B5010000] <1> mov ebx, %2 104 <1> %if %0 >= 3 104 00000049 B9FF000000 <1> mov ecx, %3 104 <1> %if %0 = 4 104 0000004E BA0F000000 <1> mov edx, %4 104 <1> %endif 104 <1> %endif 104 <1> %endif 104 00000053 B823000000 <1> mov eax, %1 104 <1> 104 00000058 CD40 <1> int 40h 105 106 0000005A EB35 jmp short _2_ok 107 _2: 108 0000005C 83C302 add ebx, 2 109 0000005F 39E3 cmp ebx, esp 110 00000061 7418 je short _2_err 111 112 sys _msg, msg_err, 255, 0Fh 112 <1> 112 <1> 112 <1> 112 <1> 112 <1> %if %0 >= 2 112 00000063 BB[95030000] <1> mov ebx, %2 112 <1> %if %0 >= 3 112 00000068 B9FF000000 <1> mov ecx, %3 112 <1> %if %0 = 4 112 0000006D BA0F000000 <1> mov edx, %4 112 <1> %endif 112 <1> %endif 112 <1> %endif 112 00000072 B823000000 <1> mov eax, %1 112 <1> 112 00000077 CD40 <1> int 40h 113 114 00000079 EB16 jmp short _2_ok 115 _2_err: 116 sys _msg, msg_err2, 255, 0Fh 116 <1> 116 <1> 116 <1> 116 <1> 116 <1> %if %0 >= 2 116 0000007B BB[86020000] <1> mov ebx, %2 116 <1> %if %0 >= 3 116 00000080 B9FF000000 <1> mov ecx, %3 116 <1> %if %0 = 4 116 00000085 BA0F000000 <1> mov edx, %4 116 <1> %endif 116 <1> %endif 116 <1> %endif 116 0000008A B823000000 <1> mov eax, %1 116 <1> 116 0000008F CD40 <1> int 40h 117 _2_ok: 118 00000091 665B pop bx 119 120 00000093 66FF35[90010000] push word [numara] 121 0000009A 66813C24D204 cmp word [esp], 1234 122 000000A0 7518 jne short _3 123 124 sys _msg, msg_ok3, 255, 0Fh 124 <1> 124 <1> 124 <1> 124 <1> 124 <1> %if %0 >= 2 124 000000A2 BB[D6010000] <1> mov ebx, %2 124 <1> %if %0 >= 3 124 000000A7 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 124 000000AC BA0F000000 <1> mov edx, %4 124 <1> %endif 124 <1> %endif 124 <1> %endif 124 000000B1 B823000000 <1> mov eax, %1 124 <1> 124 000000B6 CD40 <1> int 40h 125 126 000000B8 EB16 jmp short _3_ok 127 _3: 128 sys _msg, msg_err2, 255, 0Fh 128 <1> 128 <1> 128 <1> 128 <1> 128 <1> %if %0 >= 2 128 000000BA BB[86020000] <1> mov ebx, %2 128 <1> %if %0 >= 3 128 000000BF B9FF000000 <1> mov ecx, %3 128 <1> %if %0 = 4 128 000000C4 BA0F000000 <1> mov edx, %4 128 <1> %endif 128 <1> %endif 128 <1> %endif 128 000000C9 B823000000 <1> mov eax, %1 128 <1> 128 000000CE CD40 <1> int 40h 129 _3_ok: 130 000000D0 89EB mov ebx, ebp 131 000000D2 83EB04 sub ebx, 4 132 000000D5 39E3 cmp ebx, esp 133 000000D7 7518 jne short _4 134 135 sys _msg, msg_ok4, 255, 0Fh 135 <1> 135 <1> 135 <1> 135 <1> 135 <1> %if %0 >= 2 135 000000D9 BB[06020000] <1> mov ebx, %2 135 <1> %if %0 >= 3 135 000000DE B9FF000000 <1> mov ecx, %3 135 <1> %if %0 = 4 135 000000E3 BA0F000000 <1> mov edx, %4 135 <1> %endif 135 <1> %endif 135 <1> %endif 135 000000E8 B823000000 <1> mov eax, %1 135 <1> 135 000000ED CD40 <1> int 40h 136 137 000000EF EB35 jmp short _4_ok 138 _4: 139 000000F1 83C302 add ebx, 2 140 000000F4 39E3 cmp ebx, esp 141 000000F6 7418 je short _4_err 142 143 sys _msg, msg_err, 255, 0Fh 143 <1> 143 <1> 143 <1> 143 <1> 143 <1> %if %0 >= 2 143 000000F8 BB[95030000] <1> mov ebx, %2 143 <1> %if %0 >= 3 143 000000FD B9FF000000 <1> mov ecx, %3 143 <1> %if %0 = 4 143 00000102 BA0F000000 <1> mov edx, %4 143 <1> %endif 143 <1> %endif 143 <1> %endif 143 00000107 B823000000 <1> mov eax, %1 143 <1> 143 0000010C CD40 <1> int 40h 144 145 0000010E EB16 jmp short _4_ok 146 _4_err: 147 sys _msg, msg_err4, 255, 0Fh 147 <1> 147 <1> 147 <1> 147 <1> 147 <1> %if %0 >= 2 147 00000110 BB[F7020000] <1> mov ebx, %2 147 <1> %if %0 >= 3 147 00000115 B9FF000000 <1> mov ecx, %3 147 <1> %if %0 = 4 147 0000011A BA0F000000 <1> mov edx, %4 147 <1> %endif 147 <1> %endif 147 <1> %endif 147 0000011F B823000000 <1> mov eax, %1 147 <1> 147 00000124 CD40 <1> int 40h 148 _4_ok: 149 00000126 5B pop ebx 150 00000127 81FBD2040000 cmp ebx, 1234 151 0000012D 7518 jne short _5 152 153 sys _msg, msg_ok5, 255, 0Fh 153 <1> 153 <1> 153 <1> 153 <1> 153 <1> %if %0 >= 2 153 0000012F BB[32020000] <1> mov ebx, %2 153 <1> %if %0 >= 3 153 00000134 B9FF000000 <1> mov ecx, %3 153 <1> %if %0 = 4 153 00000139 BA0F000000 <1> mov edx, %4 153 <1> %endif 153 <1> %endif 153 <1> %endif 153 0000013E B823000000 <1> mov eax, %1 153 <1> 153 00000143 CD40 <1> int 40h 154 155 00000145 EB36 jmp short _5_ok 156 _5: 157 00000147 53 push ebx 158 sys _msg, msg_err5, 255, 0Fh 158 <1> 158 <1> 158 <1> 158 <1> 158 <1> %if %0 >= 2 158 00000148 BB[3E030000] <1> mov ebx, %2 158 <1> %if %0 >= 3 158 0000014D B9FF000000 <1> mov ecx, %3 158 <1> %if %0 = 4 158 00000152 BA0F000000 <1> mov edx, %4 158 <1> %endif 158 <1> %endif 158 <1> %endif 158 00000157 B823000000 <1> mov eax, %1 158 <1> 158 0000015C CD40 <1> int 40h 159 0000015E 665B pop bx 160 00000160 6681FBD204 cmp bx, 1234 161 00000165 7516 jne short _5_ok 162 sys _msg, msg_ok6, 255, 0Fh 162 <1> 162 <1> 162 <1> 162 <1> 162 <1> %if %0 >= 2 162 00000167 BB[6C030000] <1> mov ebx, %2 162 <1> %if %0 >= 3 162 0000016C B9FF000000 <1> mov ecx, %3 162 <1> %if %0 = 4 162 00000171 BA0F000000 <1> mov edx, %4 162 <1> %endif 162 <1> %endif 162 <1> %endif 162 00000176 B823000000 <1> mov eax, %1 162 <1> 162 0000017B CD40 <1> int 40h 163 _5_ok: 164 0000017D B40E mov ah, 0Eh 165 0000017F B00D mov al, 0Dh 166 00000181 CD31 int 31h ; Video Interrupt 167 00000183 B00A mov al, 0Ah 168 00000185 CD31 int 31h ; Video Interrupt 169 170 sys _exit ; INT 40h 170 <1> 170 <1> 170 <1> 170 <1> 170 <1> %if %0 >= 2 170 <1> mov ebx, %2 170 <1> %if %0 >= 3 170 <1> mov ecx, %3 170 <1> %if %0 = 4 170 <1> mov edx, %4 170 <1> %endif 170 <1> %endif 170 <1> %endif 170 00000187 B801000000 <1> mov eax, %1 170 <1> 170 0000018C CD40 <1> int 40h 171 here: 172 0000018E EBFE jmp short here 173 174 ;----------------------------------------------------------------- 175 ; DATA 176 ;----------------------------------------------------------------- 177 178 numara: 179 00000190 D204 dw 1234 180 181 ;----------------------------------------------------------------- 182 ; messages 183 ;----------------------------------------------------------------- 184 185 msg_ok1: 186 00000192 0D0A db 0Dh, 0Ah 187 00000194 4F4B20212028707573- db 'OK ! (push bx : word [esp] = bx)' 187 0000019D 68206278203A20776F- 187 000001A6 7264205B6573705D20- 187 000001AF 3D20627829 188 000001B4 00 db 0 189 msg_ok2: 190 000001B5 0D0A db 0Dh, 0Ah 191 000001B7 4F4B20212028707573- db 'OK ! (push bx : esp = esp - 4)' 191 000001C0 68206278203A206573- 191 000001C9 70203D20657370202D- 191 000001D2 203429 192 000001D5 00 db 0 193 msg_ok3: 194 000001D6 0D0A db 0Dh, 0Ah 195 000001D8 4F4B20212028707573- db 'OK ! (push word [numara] : word [esp] = 1234)' 195 000001E1 6820776F7264205B6E- 195 000001EA 756D6172615D203A20- 195 000001F3 776F7264205B657370- 195 000001FC 5D203D203132333429 196 00000205 00 db 0 197 msg_ok4: 198 00000206 0D0A db 0Dh, 0Ah 199 00000208 4F4B20212028707573- db 'OK ! (push word [numara] : esp = esp - 4)' 199 00000211 6820776F7264205B6E- 199 0000021A 756D6172615D203A20- 199 00000223 657370203D20657370- 199 0000022C 202D203429 200 00000231 00 db 0 201 msg_ok5: 202 00000232 0D0A db 0Dh, 0Ah 203 00000234 4F4B20212028706F70- db 'OK ! (pop ebx : ebx = 1234 = [numara])' 203 0000023D 2065627820203A2065- 203 00000246 6278203D2031323334- 203 0000024F 203D205B6E756D6172- 203 00000258 615D29 204 0000025B 0D0A00 db 0Dh, 0Ah, 0 205 206 msg_err1: 207 0000025E 0D0A db 0Dh, 0Ah 208 00000260 20204572726F722021- db ' Error ! (push bx : word [esp] = bx)' 208 00000269 202870757368206278- 208 00000272 203A20776F7264205B- 208 0000027B 6573705D203D206278- 208 00000284 29 209 00000285 00 db 0 210 211 msg_err2: 212 00000286 0D0A db 0Dh, 0Ah 213 00000288 20204572726F722021- db ' Error ! (push bx : esp = esp - 4) : (( esp = esp - 2 ))' 213 00000291 202870757368206278- 213 0000029A 203A20657370203D20- 213 000002A3 657370202D20342920- 213 000002AC 3A2028282065737020- 213 000002B5 3D20657370202D2032- 213 000002BE 202929 214 000002C1 00 db 0 215 216 msg_err3: 217 000002C2 0D0A db 0Dh, 0Ah 218 000002C4 20204572726F722021- db ' Error ! (push word [numara] : word [esp] = 1234)' 218 000002CD 20287075736820776F- 218 000002D6 7264205B6E756D6172- 218 000002DF 615D203A20776F7264- 218 000002E8 205B6573705D203D20- 218 000002F1 3132333429 219 000002F6 00 db 0 220 221 msg_err4: 222 000002F7 0D0A db 0Dh, 0Ah 223 000002F9 20204572726F722021- db ' Error ! (push word [numara] : esp = esp - 4) : (( esp = esp - 2 ))' 223 00000302 20287075736820776F- 223 0000030B 7264205B6E756D6172- 223 00000314 615D203A2065737020- 223 0000031D 3D20657370202D2034- 223 00000326 29203A202828206573- 223 0000032F 70203D20657370202D- 223 00000338 2032202929 224 0000033D 00 db 0 225 msg_err5: 226 0000033E 0D0A db 0Dh, 0Ah 227 00000340 20204572726F722021- db ' Error ! (pop ebx : ebx = 1234 = [numara])' 227 00000349 2028706F7020656278- 227 00000352 203A20656278203D20- 227 0000035B 31323334203D205B6E- 227 00000364 756D6172615D29 228 0000036B 00 db 0 229 msg_ok6: 230 0000036C 0D0A db 0Dh, 0Ah 231 0000036E 4F4B20212028706F70- db 'OK ! (pop bx : bx = 1234 = [numara])' 231 00000377 206278203A20627820- 231 00000380 3D2031323334203D20- 231 00000389 5B6E756D6172615D29 232 00000392 0D0A00 db 0Dh, 0Ah, 0 233 msg_err: 234 00000395 0D0A20204552524F52- db 0Dh, 0Ah, ' ERROR !', 0 234 0000039E 202100