1 ; **************************************************************************** 2 ; readfile.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'readfile.prg') 3 ; ---------------------------------------------------------------------------- 4 ; READFILE.PRG ! 'sysopen' and 'sysread' TEST program for TRDOS 386 ! 5 ; 6 ; 11/10/2016 7 ; 8 ; [ Last Modification: 12/10/2016 ] 9 ; 10 ; **************************************************************************** 11 ; 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 _stty equ 31 46 _gtty equ 32 47 _ilgins equ 33 48 _sleep equ 34 49 _msg equ 35 50 51 %macro sys 1-4 52 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 53 ; 03/09/2015 54 ; 13/04/2015 55 ; Retro UNIX 386 v1 system call. 56 %if %0 >= 2 57 mov ebx, %2 58 %if %0 >= 3 59 mov ecx, %3 60 %if %0 = 4 61 mov edx, %4 62 %endif 63 %endif 64 %endif 65 mov eax, %1 66 ;int 30h 67 int 40h ; TRDOS 386 (TRDOS v2.0) 68 %endmacro 69 70 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 71 ; sys systemcall (eax) , , 72 73 [BITS 32] ; We need 32-bit intructions for protected mode 74 75 [ORG 0] 76 77 START_CODE: 78 sys _open, TextFile, 0 ; open for reading 78 <1> 78 <1> 78 <1> 78 <1> 78 <1> %if %0 >= 2 78 00000000 BB[B8000000] <1> mov ebx, %2 78 <1> %if %0 >= 3 78 00000005 B900000000 <1> mov ecx, %3 78 <1> %if %0 = 4 78 <1> mov edx, %4 78 <1> %endif 78 <1> %endif 78 <1> %endif 78 0000000A B805000000 <1> mov eax, %1 78 <1> 78 0000000F CD40 <1> int 40h 79 00000011 7244 jc short open_error 80 81 00000013 50 push eax 82 83 00000014 BE[A9000000] mov esi, msg_reading 84 00000019 E829000000 call print_msg ; INT 31h 85 86 0000001E 5E pop esi 87 88 sys _read, esi, BUFFER, 200 ; read 200 bytes 88 <1> 88 <1> 88 <1> 88 <1> 88 <1> %if %0 >= 2 88 0000001F 89F3 <1> mov ebx, %2 88 <1> %if %0 >= 3 88 00000021 B9[D4000000] <1> mov ecx, %3 88 <1> %if %0 = 4 88 00000026 BAC8000000 <1> mov edx, %4 88 <1> %endif 88 <1> %endif 88 <1> %endif 88 0000002B B803000000 <1> mov eax, %1 88 <1> 88 00000030 CD40 <1> int 40h 89 00000032 7240 jc short read_error 90 91 show_text: 92 00000034 BE[D4000000] mov esi, BUFFER 93 00000039 E809000000 call print_msg 94 95 terminate: 96 sys _exit ; INT 40h 96 <1> 96 <1> 96 <1> 96 <1> 96 <1> %if %0 >= 2 96 <1> mov ebx, %2 96 <1> %if %0 >= 3 96 <1> mov ecx, %3 96 <1> %if %0 = 4 96 <1> mov edx, %4 96 <1> %endif 96 <1> %endif 96 <1> %endif 96 0000003E B801000000 <1> mov eax, %1 96 <1> 96 00000043 CD40 <1> int 40h 97 here: 98 00000045 EBFE jmp short here 99 100 print_msg: 101 00000047 BB0E000000 mov ebx, 0Eh ; yellow characters (bl) 102 ; video page 0 (bh) 103 ;mov ah, 0Eh ; teletype output (write tty) 104 0000004C 88DC mov ah, bl 105 0000004E AC lodsb 106 _1: 107 0000004F CD31 int 31h 108 00000051 AC lodsb 109 00000052 20C0 and al, al 110 00000054 75F9 jnz short _1 111 _2: 112 00000056 C3 retn 113 114 open_error: 115 00000057 50 push eax 116 00000058 BE[80000000] mov esi, msg_open_error 117 0000005D E8E5FFFFFF call print_msg ; INT 31h 118 00000062 58 pop eax 119 00000063 83F802 cmp eax, 2 120 00000066 75D6 jne short terminate 121 00000068 BE[94000000] mov esi, msg_not_found 122 0000006D E8D5FFFFFF call print_msg ; INT 31h 123 00000072 EBCA jmp short terminate 124 125 read_error: 126 00000074 BE[C3000000] mov esi, msg_read_error 127 00000079 E8C9FFFFFF call print_msg ; INT 31h 128 0000007E EBBE jmp short terminate 129 130 ;----------------------------------------------------------------- 131 ; messages 132 ;----------------------------------------------------------------- 133 134 msg_open_error: 135 00000080 0D0A db 0Dh, 0Ah 136 00000082 7379736F70656E2065- db 'sysopen error !' 136 0000008B 72726F722021 137 00000091 0D0A00 db 0Dh, 0Ah, 0 138 msg_not_found: 139 00000094 0D0A db 0Dh, 0Ah 140 00000096 66696C65206E6F7420- db 'file not found !' 140 0000009F 666F756E642021 141 000000A6 0D0A00 db 0Dh, 0Ah, 0 142 msg_reading: 143 000000A9 0D0A db 0Dh, 0Ah 144 000000AB 72656164696E672066- db 'reading file ' 144 000000B4 696C6520 145 TextFile: 146 000000B8 524541444D452E5458- db 'README.TXT' 146 000000C1 54 147 000000C2 00 db 0 148 msg_read_error: 149 000000C3 0D0A db 0Dh, 0Ah 150 000000C5 72656164206572726F- db 'read error !' 150 000000CE 722021 151 000000D1 0D0A00 db 0Dh, 0Ah, 0 152 153 ;bss 154 155 BUFFER: 156 000000D4 313233343536373839- db '1234567890', 0 156 000000DD 3000