1 ; **************************************************************************** 2 ; writetst.s - TRDOS 386 (TRDOS v2.0) Kernel - SYSWRITE function test 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 24/08/2024 6 ; 7 ; [ Last Modification: 18/09/2024 ] 8 ; 9 ; **************************************************************************** 10 11 ; 20/08/2024 ; TRDOS 386 v2.0.9 (exit code) 12 ; 20/08/2017 13 ; 01/03/2017 14 ; 16/10/2016 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 ; _delete 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 _video equ 31 49 _audio equ 32 50 _timer equ 33 51 _sleep equ 34 52 _msg equ 35 53 _geterr equ 36 54 _fpsave equ 37 55 _pri equ 38 56 _rele equ 39 57 _fff equ 40 58 _fnf equ 41 59 _alloc equ 42 60 _dalloc equ 43 61 _calbac equ 44 62 _dma equ 45 63 _stdio equ 46 ; TRDOS 386 v2.0.9 64 65 %macro sys 1-4 66 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 67 ; 03/09/2015 68 ; 13/04/2015 69 ; Retro UNIX 386 v1 system call. 70 %if %0 >= 2 71 mov ebx, %2 72 %if %0 >= 3 73 mov ecx, %3 74 %if %0 = 4 75 mov edx, %4 76 %endif 77 %endif 78 %endif 79 mov eax, %1 80 ;int 30h 81 int 40h ; TRDOS 386 (TRDOS v2.0) 82 %endmacro 83 84 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 85 ; sys systemcall (eax) , , 86 87 ;======================================================================== 88 ; EXEC TEST - CODE 89 ;======================================================================== 90 91 [BITS 32] ; 32-bit intructions 92 93 [ORG 0] 94 95 START_CODE: 96 sys _msg, program, len0, 0Bh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000000 BB[AE010000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000005 B92D000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 0000000A BA0B000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000000F B823000000 <1> mov eax, %1 80 <1> 81 00000014 CD40 <1> int 40h 97 sys _msg, owner, 255, 0Eh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000016 BB[DC010000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 0000001B B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000020 BA0E000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000025 B823000000 <1> mov eax, %1 80 <1> 81 0000002A CD40 <1> int 40h 98 99 sys _msg, sample_text_hdr, 255, 0Ch 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000002C BB[07020000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000031 B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000036 BA0C000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000003B B823000000 <1> mov eax, %1 80 <1> 81 00000040 CD40 <1> int 40h 100 sys _msg, sample_text, sample_text_size, 0Fh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000042 BB[3C020000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000047 B9A2000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 0000004C BA0F000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000051 B823000000 <1> mov eax, %1 80 <1> 81 00000056 CD40 <1> int 40h 101 sys _msg, continue_msg, 255, 07h 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000058 BB[DF020000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 0000005D B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000062 BA07000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000067 B823000000 <1> mov eax, %1 80 <1> 81 0000006C CD40 <1> int 40h 102 103 getchar_@: 104 ; getchar 105 ;mov ah, 10h 106 ;int 32h 107 108 ; stdio getchar (TRDOS 386 Kernel v2.0.9 and later) 109 ;mov bl, 6 ; read character (ascii and scancode) on stdin 110 ; -no redirection, wait- 111 sys _stdio, 6 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000006E BB06000000 <1> mov ebx, %2 72 <1> %if %0 >= 3 73 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000073 B82E000000 <1> mov eax, %1 80 <1> 81 00000078 CD40 <1> int 40h 112 113 0000007A 3C1B cmp al, 1Bh ; ESC key 114 0000007C 7405 je short terminate 115 116 0000007E E825000000 call write_sample_text 117 118 terminate: 119 sys _msg, crlf, 2, 07h 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000083 BB[0E030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000088 B902000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 0000008D BA07000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000092 B823000000 <1> mov eax, %1 80 <1> 81 00000097 CD40 <1> int 40h 120 121 sys _exit, 0 ; ebx = exit code 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000099 BB00000000 <1> mov ebx, %2 72 <1> %if %0 >= 3 73 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000009E B801000000 <1> mov eax, %1 80 <1> 81 000000A3 CD40 <1> int 40h 122 ;sys _exit 123 here: 124 000000A5 90 nop 125 000000A6 EBFD jmp short here 126 127 write_sample_text: 128 ; CL = 0FFh 129 ; CH = 0 -> 24 bytes buffer 130 sys _fff, sample_file, 0FFh, fff_buffer 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 000000A8 BB[11030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 000000AD B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 000000B2 BA[1F040000] <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 000000B7 B828000000 <1> mov eax, %1 80 <1> 81 000000BC CD40 <1> int 40h 131 000000BE 726A jc short wst_create 132 133 000000C0 F6021F test byte [edx], 1Fh ; DVSHR 134 000000C3 754E jnz short wsta_error 135 136 sys _msg, write_option_hdr, 255, 0Eh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 000000C5 BB[87030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 000000CA B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 000000CF BA0E000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 000000D4 B823000000 <1> mov eax, %1 80 <1> 81 000000D9 CD40 <1> int 40h 137 sys _msg, write_option, 255, 0Fh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 000000DB BB[BC030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 000000E0 B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 000000E5 BA0F000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 000000EA B823000000 <1> mov eax, %1 80 <1> 81 000000EF CD40 <1> int 40h 138 139 wst_get_option: 140 sys _stdio, 6 ; read character (from STDIN) 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 000000F1 BB06000000 <1> mov ebx, %2 72 <1> %if %0 >= 3 73 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 000000F6 B82E000000 <1> mov eax, %1 80 <1> 81 000000FB CD40 <1> int 40h 141 000000FD 3C0D cmp al, 0Dh ; ENTER 142 000000FF 7429 je short wst_create 143 00000101 3C1B cmp al, 1Bh ; ESC 144 00000103 75EC jne short wst_get_option 145 146 ;sys _delete, sample_file 147 sys _unlink, sample_file 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000105 BB[11030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000010A B80A000000 <1> mov eax, %1 80 <1> 81 0000010F CD40 <1> int 40h 148 00000111 7317 jnc short wst_create 149 150 wsta_error: 151 sys _msg, access_error, 255, 0Dh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000113 BB[46030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000118 B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 0000011D BA0D000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000122 B823000000 <1> mov eax, %1 80 <1> 81 00000127 CD40 <1> int 40h 152 00000129 C3 retn 153 154 wst_create: 155 ; create SAMPLE.TXT or truncate it if it is existing 156 sys _creat, sample_file, 0 ; create normal file 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000012A BB[11030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 0000012F B900000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000134 B808000000 <1> mov eax, %1 80 <1> 81 00000139 CD40 <1> int 40h 157 0000013B 7317 jnc short wst_continue_1 ; eax = file handle 158 wstc_error: 159 sys _msg, create_error, 255, 0Dh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000013D BB[1C030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000142 B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000147 BA0D000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000014C B823000000 <1> mov eax, %1 80 <1> 81 00000151 CD40 <1> int 40h 160 00000153 C3 retn 161 162 wst_continue_1: 163 00000154 A3[1B040000] mov [filehandle], eax 164 165 sys _write, eax, sample_text, sample_text_size 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 00000159 89C3 <1> mov ebx, %2 72 <1> %if %0 >= 3 73 0000015B B9[3C020000] <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000160 BAA2000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000165 B804000000 <1> mov eax, %1 80 <1> 81 0000016A CD40 <1> int 40h 166 0000016C 7318 jnc short wst_continue_2 167 168 sys _msg, write_error, 255, 0Dh 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000016E BB[65030000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 00000173 B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000178 BA0D000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 0000017D B823000000 <1> mov eax, %1 80 <1> 81 00000182 CD40 <1> int 40h 169 00000184 EB1A jmp short wst_close 170 171 wst_continue_2: 172 00000186 21C0 and eax, eax ; written bytes 173 00000188 7416 jz short wst_close 174 175 ; written message (success/completed msg) 176 sys _msg, msg_written, 255, 07h 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 0000018A BB[F7010000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 0000018F B9FF000000 <1> mov ecx, %3 74 <1> %if %0 = 4 75 00000194 BA07000000 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 00000199 B823000000 <1> mov eax, %1 80 <1> 81 0000019E CD40 <1> int 40h 177 178 wst_close: 179 ; close SAMPLE.TXT file 180 sys _close, [filehandle] 66 <1> 67 <1> 68 <1> 69 <1> 70 <1> %if %0 >= 2 71 000001A0 8B1D[1B040000] <1> mov ebx, %2 72 <1> %if %0 >= 3 73 <1> mov ecx, %3 74 <1> %if %0 = 4 75 <1> mov edx, %4 76 <1> %endif 77 <1> %endif 78 <1> %endif 79 000001A6 B806000000 <1> mov eax, %1 80 <1> 81 000001AB CD40 <1> int 40h 181 000001AD C3 retn 182 183 ;----------------------------------------------------------------- 184 ; messages 185 ;----------------------------------------------------------------- 186 187 program: 188 000001AE 0D0A db 0Dh, 0Ah 189 000001B0 5452444F5320333836- db "TRDOS 386 v2.0.9 - SYSWRITE Function Test" 189 000001B9 2076322E302E39202D- 189 000001C2 205359535752495445- 189 000001CB 2046756E6374696F6E- 189 000001D4 2054657374 190 000001D9 0D0A db 0Dh, 0Ah 191 len0 equ $-program 192 000001DB 00 db 0 193 owner: 194 000001DC 4572646F67616E2054- db "Erdogan Tan - 18/09/2024" 194 000001E5 616E202D2031382F30- 194 000001EE 392F32303234 195 000001F4 0D0A00 db 0Dh, 0Ah, 0 196 197 msg_written: 198 000001F7 0D0A db 0Dh, 0Ah 199 000001F9 7772697474656E202E- db "written ..." 199 00000202 2E2E 200 00000204 0D0A00 db 0Dh, 0Ah, 0 201 202 sample_text_hdr: 203 00000207 0D0A db 0Dh, 0Ah 204 00000209 53616D706C65205465- db "Sample Text to be written into SAMPLE.TXT file :" 204 00000212 787420746F20626520- 204 0000021B 7772697474656E2069- 204 00000224 6E746F2053414D504C- 204 0000022D 452E5458542066696C- 204 00000236 65203A 205 00000239 0D0A00 db 0Dh, 0Ah, 0 206 sample_text: 207 0000023C 546869732069732061- db "This is a text for TRDOS 386 v2 SYSWRITE system call test." 207 00000245 207465787420666F72- 207 0000024E 205452444F53203338- 207 00000257 362076322053595357- 207 00000260 524954452073797374- 207 00000269 656D2063616C6C2074- 207 00000272 6573742E 208 00000276 0D0A db 0Dh, 0Ah 209 00000278 0D0A db 0Dh, 0Ah 210 0000027A 492072756E20656163- db "I run each teen me? Each team. Catch bar duck each teen?" 210 00000283 68207465656E206D65- 210 0000028C 3F2045616368207465- 210 00000295 616D2E204361746368- 210 0000029E 20626172206475636B- 210 000002A7 206561636820746565- 210 000002B0 6E3F 211 000002B2 0D0A db 0Dh, 0Ah 212 000002B4 4F6E20626172206475- db "On bar duck each team. Why high one why!" 212 000002BD 636B20656163682074- 212 000002C6 65616D2E2057687920- 212 000002CF 68696768206F6E6520- 212 000002D8 77687921 213 000002DC 0D0A00 db 0Dh, 0Ah, 0 214 sample_text_size equ $ - (sample_text+1) ; except 0 215 216 continue_msg: 217 000002DF 0D0A db 0Dh, 0Ah 218 000002E1 50726573732061206B- db "Press a key to continue or press ESC to exit." 218 000002EA 657920746F20636F6E- 218 000002F3 74696E7565206F7220- 218 000002FC 707265737320455343- 218 00000305 20746F20657869742E 219 crlf: 220 0000030E 0D0A00 db 0Dh, 0Ah, 0 221 222 sample_file: 223 00000311 53414D504C452E5458- db "SAMPLE.TXT", 0 223 0000031A 5400 224 create_error: 225 0000031C 0D0A db 0Dh, 0Ah 226 0000031E 535953435245415420- db "SYSCREAT - File creating/open error !" 226 00000327 2D2046696C65206372- 226 00000330 656174696E672F6F70- 226 00000339 656E206572726F7220- 226 00000342 21 227 00000343 0D0A00 db 0Dh, 0Ah,0 228 access_error: 229 00000346 0D0A db 0Dh, 0Ah 230 00000348 46696C652061636365- db "File access/delete error !" 230 00000351 73732F64656C657465- 230 0000035A 206572726F722021 231 00000362 0D0A00 db 0Dh, 0Ah,0 232 write_error: 233 00000365 0D0A db 0Dh, 0Ah 234 00000367 535953575249544520- db "SYSWRITE - File write error !" 234 00000370 2D2046696C65207772- 234 00000379 697465206572726F72- 234 00000382 2021 235 00000384 0D0A00 db 0Dh, 0Ah,0 236 237 write_option_hdr: 238 00000387 0D0A db 0Dh, 0Ah 239 00000389 53414D504C452E5458- db "SAMPLE.TXT file exists! Select owerwrite option:" 239 00000392 542066696C65206578- 239 0000039B 69737473212053656C- 239 000003A4 656374206F77657277- 239 000003AD 72697465206F707469- 239 000003B6 6F6E3A 240 000003B9 0D0A db 0Dh, 0Ah 241 000003BB 00 db 0 242 write_option: 243 000003BC 0D0A db 0Dh, 0Ah 244 000003BE 454E544552202D2043- db "ENTER - Create/Truncate method (SYSCREAT)" 244 000003C7 72656174652F547275- 244 000003D0 6E63617465206D6574- 244 000003D9 686F64202853595343- 244 000003E2 5245415429 245 000003E7 0D0A db 0Dh, 0Ah 246 000003E9 455343202D2044656C- db "ESC - Delete/Create method (SYSUNLINK+SYSCREAT)" 246 000003F2 6574652F4372656174- 246 000003FB 65206D6574686F6420- 246 00000404 28535953554E4C494E- 246 0000040D 4B2B53595343524541- 246 00000416 5429 247 00000418 0D0A00 db 0Dh, 0Ah, 0 248 249 0000041B 00000000 filehandle: dd 0 250 251 0000041F FF fff_buffer: times 24 db 0FFh