     1                                  ; ****************************************************************************
     2                                  ; pmi32s - TRDOS 386 (TRDOS v2.0.3) Test Program - switch vbe3 pmi32 state 
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 04/12/2020 (03/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                                  		; get status of vesa vbe3 protected mode interface
    90 00000000 31DB                    		xor	ebx, ebx	
    91 00000002 66BB0209                		mov	bx, 0902h
    92                                  		sys	_video
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1>  %if %0 >= 2
    92                              <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    92                              <1>  mov ecx, %3
    92                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    92                              <1>  %endif
    92                              <1>  %endif
    92                              <1>  %endif
    92 00000006 B81F000000          <1>  mov eax, %1
    92                              <1> 
    92 0000000B CD40                <1>  int 40h
    93                                  		
    94 0000000D 08C0                    		or	al, al
    95 0000000F 7420                    		jz	short not_vbe3_vbios ; not available
    96                                  
    97 00000011 88C3                    		mov	bl, al ; 1 (disabled) or 2 (enabled)
    98 00000013 FECB                    		dec	bl  ; 0 (disabled) or 1 (enabled)
    99 00000015 80F301                  		xor	bl, 1 ; 1 = 0, 0 = 1 ; switch
   100                                  		;mov	bh, 9
   101                                  		sys	_video
   101                              <1> 
   101                              <1> 
   101                              <1> 
   101                              <1> 
   101                              <1>  %if %0 >= 2
   101                              <1>  mov ebx, %2
   101                              <1>  %if %0 >= 3
   101                              <1>  mov ecx, %3
   101                              <1>  %if %0 = 4
   101                              <1>  mov edx, %4
   101                              <1>  %endif
   101                              <1>  %endif
   101                              <1>  %endif
   101 00000018 B81F000000          <1>  mov eax, %1
   101                              <1> 
   101 0000001D CD40                <1>  int 40h
   102                                  		
   103 0000001F 3C01                    		cmp	al, 1
   104 00000021 7707                    		ja	short pmienabled
   105                                  pmidisabled:
   106 00000023 BE[92000000]            		mov	esi, pmidisabledmsg		
   107 00000028 EB0C                    		jmp	print_msg
   108                                  pmienabled:
   109 0000002A BE[7F000000]            		mov	esi, pmienabledmsg		
   110 0000002F EB05                    		jmp	print_msg		 
   111                                  not_vbe3_vbios:
   112 00000031 BE[50000000]            		mov	esi, novbe3msg
   113                                  print_msg:
   114                                  		sys 	_msg, esi, 255, 0Fh 
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1>  %if %0 >= 2
   114 00000036 89F3                <1>  mov ebx, %2
   114                              <1>  %if %0 >= 3
   114 00000038 B9FF000000          <1>  mov ecx, %3
   114                              <1>  %if %0 = 4
   114 0000003D BA0F000000          <1>  mov edx, %4
   114                              <1>  %endif
   114                              <1>  %endif
   114                              <1>  %endif
   114 00000042 B823000000          <1>  mov eax, %1
   114                              <1> 
   114 00000047 CD40                <1>  int 40h
   115                                  				; message with white color 
   116                                  				; (max. 255 chars)
   117                                  		sys	_exit
   117                              <1> 
   117                              <1> 
   117                              <1> 
   117                              <1> 
   117                              <1>  %if %0 >= 2
   117                              <1>  mov ebx, %2
   117                              <1>  %if %0 >= 3
   117                              <1>  mov ecx, %3
   117                              <1>  %if %0 = 4
   117                              <1>  mov edx, %4
   117                              <1>  %endif
   117                              <1>  %endif
   117                              <1>  %endif
   117 00000049 B801000000          <1>  mov eax, %1
   117                              <1> 
   117 0000004E CD40                <1>  int 40h
   118                                  
   119                                  ;-----------------------------------------------------------------
   120                                  ;  MESSAGE
   121                                  ;-----------------------------------------------------------------
   122                                  
   123                                  novbe3msg:
   124 00000050 0D0A                    	db	0Dh, 0Ah
   125 00000052 564553412056424533-     	db	"VESA VBE3 video bios PMI is not detected !"
   125 0000005B 20766964656F206269-
   125 00000064 6F7320504D49206973-
   125 0000006D 206E6F742064657465-
   125 00000076 637465642021       
   126 0000007C 0D0A00                  	db	0Dh, 0Ah,0 
   127                                  
   128                                  pmienabledmsg:
   129 0000007F 0D0A07                  	db	0Dh, 0Ah, 07h
   130 00000082 504D4920456E61626C-     	db	"PMI Enabled !"
   130 0000008B 65642021           
   131 0000008F 0D0A00                  	db	0Dh, 0Ah,0 
   132                                  
   133                                  pmidisabledmsg:
   134 00000092 0D0A07                  	db	0Dh, 0Ah, 07h
   135 00000095 504D49204469736162-     	db	"PMI Disabled !"
   135 0000009E 6C65642021         
   136 000000A3 0D0A00                  	db	0Dh, 0Ah,0 
   137                                  
   138 000000A6 4572646F67616E2054-     	db	"Erdogan Tan - 04/12/2020 (TRDOS 386 v2.0.3)"
   138 000000AF 616E202D2030342F31-
   138 000000B8 322F32303230202854-
   138 000000C1 52444F532033383620-
   138 000000CA 76322E302E3329     
   139 000000D1 00                      	db	0 	
