     1                                  ; ****************************************************************************
     2                                  ; clear13h.s - TRDOS 386 (TRDOS v2.0.3) Test Program - reset mode 3 after 13h 
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 08/12/2020 (07/12/2020)
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  
     9                                  ; 01/03/2017
    10                                  ; 16/10/2016
    11                                  ; 29/04/2016
    12                                  ; TRDOS 386 system calls (temporary list!)
    13                                  _ver 	equ 0
    14                                  _exit 	equ 1
    15                                  _fork 	equ 2
    16                                  _read 	equ 3
    17                                  _write	equ 4
    18                                  _open	equ 5
    19                                  _close 	equ 6
    20                                  _wait 	equ 7
    21                                  _creat 	equ 8
    22                                  _link 	equ 9
    23                                  _unlink	equ 10
    24                                  _exec	equ 11
    25                                  _chdir	equ 12
    26                                  _time 	equ 13
    27                                  _mkdir 	equ 14
    28                                  _chmod	equ 15
    29                                  _chown	equ 16
    30                                  _break	equ 17
    31                                  _stat	equ 18
    32                                  _seek	equ 19
    33                                  _tell 	equ 20
    34                                  _mount	equ 21
    35                                  _umount	equ 22
    36                                  _setuid	equ 23
    37                                  _getuid	equ 24
    38                                  _stime	equ 25
    39                                  _quit	equ 26	
    40                                  _intr	equ 27
    41                                  _fstat	equ 28
    42                                  _emt 	equ 29
    43                                  _mdate 	equ 30
    44                                  _video 	equ 31
    45                                  _audio	equ 32
    46                                  _timer	equ 33
    47                                  _sleep	equ 34
    48                                  _msg    equ 35
    49                                  _geterr	equ 36
    50                                  _fpsave	equ 37
    51                                  _pri	equ 38
    52                                  _rele	equ 39
    53                                  _fff	equ 40
    54                                  _fnf	equ 41
    55                                  _alloc	equ 42
    56                                  _dalloc equ 43
    57                                  _calbac equ 44
    58                                  
    59                                  %macro sys 1-4
    60                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    61                                      ; 03/09/2015	
    62                                      ; 13/04/2015
    63                                      ; Retro UNIX 386 v1 system call.	
    64                                      %if %0 >= 2   
    65                                          mov ebx, %2
    66                                          %if %0 >= 3    
    67                                              mov ecx, %3
    68                                              %if %0 = 4
    69                                                 mov edx, %4   
    70                                              %endif
    71                                          %endif
    72                                      %endif
    73                                      mov eax, %1
    74                                      ;int 30h
    75                                      int 40h ; TRDOS 386 (TRDOS v2.0)	   
    76                                  %endmacro
    77                                  
    78                                  ; TRDOS 386 (and Retro UNIX 386 v1) system call format:
    79                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    80                                  
    81                                  ;========================================================================
    82                                  ; TEST VESA VBE 3 16 BIT PROTECTED MODE INTERFACE FAR CALL FOR TRDOS 386 
    83                                  ;========================================================================
    84                                  
    85                                  [BITS 32]	; 32-bit intructions
    86                                  
    87                                  [ORG 0] 
    88                                  START_CODE:
    89                                  		; Screen will be cleared and if there is,
    90                                  		; mode 03h defect (after mode 13h) will be fixed.
    91                                  
    92                                  		; get status of vesa vbe3 protected mode interface
    93 00000000 31DB                    		xor	ebx, ebx	
    94 00000002 66BB0209                		mov	bx, 0902h
    95                                  		sys	_video
    95                              <1> 
    95                              <1> 
    95                              <1> 
    95                              <1> 
    95                              <1>  %if %0 >= 2
    95                              <1>  mov ebx, %2
    95                              <1>  %if %0 >= 3
    95                              <1>  mov ecx, %3
    95                              <1>  %if %0 = 4
    95                              <1>  mov edx, %4
    95                              <1>  %endif
    95                              <1>  %endif
    95                              <1>  %endif
    95 00000006 B81F000000          <1>  mov eax, %1
    95                              <1> 
    95 0000000B CD40                <1>  int 40h
    96                                  		
    97 0000000D 08C0                    		or	al, al
    98 0000000F 7446                    		jz	short clearscreen ; vbe3 pmi is not available
    99                                  
   100 00000011 88C3                    		mov	bl, al ; 1 (disabled) or 2 (enabled)
   101 00000013 FECB                    		dec	bl  ; 0 (disabled) or 1 (enabled)
   102 00000015 881D[AE000000]          		mov	[pmi32status], bl
   103 0000001B 7509                    		jnz	short pmistatus1  ; 1
   104                                  		; Enable pmi32
   105 0000001D FEC3                    		inc	bl ; 0 -> 1
   106                                  		;mov	bh, 9
   107                                  		sys	_video
   107                              <1> 
   107                              <1> 
   107                              <1> 
   107                              <1> 
   107                              <1>  %if %0 >= 2
   107                              <1>  mov ebx, %2
   107                              <1>  %if %0 >= 3
   107                              <1>  mov ecx, %3
   107                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   107                              <1>  %endif
   107                              <1>  %endif
   107                              <1>  %endif
   107 0000001F B81F000000          <1>  mov eax, %1
   107                              <1> 
   107 00000024 CD40                <1>  int 40h
   108                                  pmistatus1:
   109                                  		; Set video mode to 13h
   110 00000026 66B81300                		mov	ax, 13h
   111 0000002A CD31                    		int	31h ; int 10h in x86 real mode
   112                                  
   113                                  		; write message in mode 13h
   114                                  		sys 	_msg, clearmsg, 255, 0Fh 
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1>  %if %0 >= 2
   114 0000002C BB[66000000]        <1>  mov ebx, %2
   114                              <1>  %if %0 >= 3
   114 00000031 B9FF000000          <1>  mov ecx, %3
   114                              <1>  %if %0 = 4
   114 00000036 BA0F000000          <1>  mov edx, %4
   114                              <1>  %endif
   114                              <1>  %endif
   114                              <1>  %endif
   114 0000003B B823000000          <1>  mov eax, %1
   114                              <1> 
   114 00000040 CD40                <1>  int 40h
   115                                  				; message with white color 
   116                                  				; (max. 255 chars)
   117                                  
   118                                  		; Set video mode to 03h
   119 00000042 66B80300                		mov 	ax, 3
   120 00000046 CD31                    		int	31h
   121                                  		
   122                                  		; restore status of vesa vbe3 pmi
   123 00000048 8A1D[AE000000]          		mov	bl, [pmi32status] 
   124 0000004E B709                    		mov	bh, 09h
   125                                  		sys	_video	 
   125                              <1> 
   125                              <1> 
   125                              <1> 
   125                              <1> 
   125                              <1>  %if %0 >= 2
   125                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   125                              <1>  mov ecx, %3
   125                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   125                              <1>  %endif
   125                              <1>  %endif
   125                              <1>  %endif
   125 00000050 B81F000000          <1>  mov eax, %1
   125                              <1> 
   125 00000055 CD40                <1>  int 40h
   126                                  clearscreen:
   127                                  		; Set video mode to 03h (clear screen)
   128 00000057 66B80300                		mov 	ax, 3
   129 0000005B CD31                    		int	31h
   130                                  
   131                                  		sys	_exit
   131                              <1> 
   131                              <1> 
   131                              <1> 
   131                              <1> 
   131                              <1>  %if %0 >= 2
   131                              <1>  mov ebx, %2
   131                              <1>  %if %0 >= 3
   131                              <1>  mov ecx, %3
   131                              <1>  %if %0 = 4
   131                              <1>  mov edx, %4
   131                              <1>  %endif
   131                              <1>  %endif
   131                              <1>  %endif
   131 0000005D B801000000          <1>  mov eax, %1
   131                              <1> 
   131 00000062 CD40                <1>  int 40h
   132                                  here:
   133 00000064 EBFE                    		jmp	 short here
   134                                  
   135                                  ;-----------------------------------------------------------------
   136                                  ;  MESSAGE
   137                                  ;-----------------------------------------------------------------
   138                                  
   139                                  clearmsg:
   140 00000066 0D0A                    	db	0Dh, 0Ah
   141 00000068 53637265656E207769-     	db	"Screen will be cleared !"
   141 00000071 6C6C20626520636C65-
   141 0000007A 617265642021       
   142 00000080 0D0A00                  	db	0Dh, 0Ah,0 
   143                                  
   144 00000083 4572646F67616E2054-     	db	"Erdogan Tan - 08/12/2020 (TRDOS 386 v2.0.3)"
   144 0000008C 616E202D2030382F31-
   144 00000095 322F32303230202854-
   144 0000009E 52444F532033383620-
   144 000000A7 76322E302E3329     
   145                                  pmi32status:
   146 000000AE 00                      	db	0 	
