     1                                  ; ****************************************************************************
     2                                  ; edid.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' read edid
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 19/01/2021 (Erdogan Tan)
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  
     9                                  ; 14/07/2020
    10                                  ; 31/12/2017
    11                                  ; TRDOS 386 (v2.0) system calls
    12                                  _ver 	equ 0
    13                                  _exit 	equ 1
    14                                  _fork 	equ 2
    15                                  _read 	equ 3
    16                                  _write	equ 4
    17                                  _open	equ 5
    18                                  _close 	equ 6
    19                                  _wait 	equ 7
    20                                  _create	equ 8
    21                                  _rename	equ 9
    22                                  _delete	equ 10
    23                                  _exec	equ 11
    24                                  _chdir	equ 12
    25                                  _time 	equ 13
    26                                  _mkdir 	equ 14
    27                                  _chmod	equ 15
    28                                  _rmdir	equ 16
    29                                  _break	equ 17
    30                                  _drive	equ 18
    31                                  _seek	equ 19
    32                                  _tell 	equ 20
    33                                  _memory	equ 21
    34                                  _prompt	equ 22
    35                                  _path	equ 23
    36                                  _env	equ 24
    37                                  _stime	equ 25
    38                                  _quit	equ 26	
    39                                  _intr	equ 27
    40                                  _dir	equ 28
    41                                  _emt 	equ 29
    42                                  _ldrvt 	equ 30
    43                                  _video 	equ 31
    44                                  _audio	equ 32
    45                                  _timer	equ 33
    46                                  _sleep	equ 34
    47                                  _msg    equ 35
    48                                  _geterr	equ 36
    49                                  _fpstat	equ 37
    50                                  _pri	equ 38
    51                                  _rele	equ 39
    52                                  _fff	equ 40
    53                                  _fnf	equ 41
    54                                  _alloc	equ 42
    55                                  _dalloc equ 43
    56                                  _calbac equ 44
    57                                  _dma	equ 45	
    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                                  ; READ VESA EDID (MONITOR INFO) 
    83                                  ;========================================================================
    84                                  
    85                                  [BITS 32] ; We need 32-bit intructions for protected mode
    86                                  
    87                                  [ORG 0] 
    88                                  START_CODE:
    89 00000000 BE[B4000000]            		mov	esi, TrDOS_Welcome
    90 00000005 E848000000              		call	print_msg
    91                                  
    92                                  		sys	_video, 0F00h, edid_buffer  ; read edid
    60                              <1> 
    61                              <1> 
    62                              <1> 
    63                              <1> 
    64                              <1>  %if %0 >= 2
    65 0000000A BB000F0000          <1>  mov ebx, %2
    66                              <1>  %if %0 >= 3
    67 0000000F B9[98010000]        <1>  mov ecx, %3
    68                              <1>  %if %0 = 4
    69                              <1>  mov edx, %4
    70                              <1>  %endif
    71                              <1>  %endif
    72                              <1>  %endif
    73 00000014 B81F000000          <1>  mov eax, %1
    74                              <1> 
    75 00000019 CD40                <1>  int 40h
    93                                  	
    94 0000001B 3D80000000              		cmp	eax, 128
    95 00000020 7524                    		jne	short edid_read_error
    96                                  
    97 00000022 BE[98010000]            		mov	esi, edid_buffer
    98 00000027 E83B000000              		call	convert_to_hex_tbl
    99                                  	
   100 0000002C C605[B3000000]0F        		mov	byte [color], 0Fh ; white
   101                                  
   102 00000033 BE[02010000]            		mov	esi, edid_header
   103 00000038 E815000000              		call	print_msg	
   104                                  terminate:
   105                                  		sys	_exit
    60                              <1> 
    61                              <1> 
    62                              <1> 
    63                              <1> 
    64                              <1>  %if %0 >= 2
    65                              <1>  mov ebx, %2
    66                              <1>  %if %0 >= 3
    67                              <1>  mov ecx, %3
    68                              <1>  %if %0 = 4
    69                              <1>  mov edx, %4
    70                              <1>  %endif
    71                              <1>  %endif
    72                              <1>  %endif
    73 0000003D B801000000          <1>  mov eax, %1
    74                              <1> 
    75 00000042 CD40                <1>  int 40h
   106                                  here:
   107 00000044 EBFE                    		jmp	short here
   108                                  
   109                                  edid_read_error:
   110 00000046 BE[50010000]            		mov	esi, edid_rerr_msg
   111 0000004B E802000000              		call	print_msg
   112 00000050 EBEB                    		jmp	short terminate
   113                                  
   114                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   115                                  ; Subroutine - print text/message on display
   116                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   117                                  
   118                                  print_msg:
   119 00000052 8A15[B3000000]          		mov	dl, [color] 
   120                                  		sys 	_msg, esi, 255
    60                              <1> 
    61                              <1> 
    62                              <1> 
    63                              <1> 
    64                              <1>  %if %0 >= 2
    65 00000058 89F3                <1>  mov ebx, %2
    66                              <1>  %if %0 >= 3
    67 0000005A B9FF000000          <1>  mov ecx, %3
    68                              <1>  %if %0 = 4
    69                              <1>  mov edx, %4
    70                              <1>  %endif
    71                              <1>  %endif
    72                              <1>  %endif
    73 0000005F B823000000          <1>  mov eax, %1
    74                              <1> 
    75 00000064 CD40                <1>  int 40h
   121                                  				; message with color 
   122                                  				; (max. 255 chars)
   123 00000066 C3                      		retn
   124                                  
   125                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   126                                  ; Subroutine - Convert to hexadecimal character table
   127                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   128                                  
   129                                  convert_to_hex_tbl:
   130                                  	; esi = binary table address
   131                                  
   132 00000067 B908000000              	mov	ecx, 8
   133                                  _h_1:
   134 0000006C 51                      	push	ecx
   135 0000006D B110                    	mov	cl, 16
   136 0000006F BF[0B010000]            	mov	edi, edid_row_chars - 2
   137                                  _h_2:
   138                                  	;add	edi, 2
   139 00000074 47                      	inc	edi
   140 00000075 47                      	inc	edi
   141 00000076 AC                      	lodsb
   142 00000077 31DB                    	xor	ebx, ebx
   143 00000079 88C3                    	mov	bl, al
   144 0000007B 80E30F                  	and	bl, 0Fh ; low 4 bits
   145                                  
   146 0000007E 8AA3[A3000000]          	mov	ah, [_hexchars+ebx]
   147 00000084 C0E804                  	shr	al, 4  ; high 4 bits
   148 00000087 88C3                    	mov	bl, al
   149 00000089 8A83[A3000000]          	mov	al, [_hexchars+ebx]	
   150 0000008F 66AB                    	stosw	
   151 00000091 E2E1                    	loop	_h_2		
   152                                  
   153 00000093 56                      	push	esi
   154 00000094 BE[0C010000]            	mov	esi, edid_row
   155 00000099 E8B4FFFFFF              	call	print_msg
   156 0000009E 5E                      	pop	esi
   157                                  
   158 0000009F 59                      	pop	ecx
   159 000000A0 E2CA                    	loop	_h_1
   160                                  
   161 000000A2 C3                      	retn
   162                                  
   163                                  _hexchars: 
   164 000000A3 303132333435363738-     	db	"0123456789ABCDEF"
   164 000000AC 39414243444546     
   165 000000B3 07                      color:	db	07h
   166                                  
   167                                  ;=============================================================================
   168                                  ;        	initialized data
   169                                  ;=============================================================================		
   170                                  
   171                                  ;-----------------------------------------------------------------------------
   172                                  ;  MESSAGES
   173                                  ;-----------------------------------------------------------------------------
   174                                  
   175                                  TrDOS_Welcome:
   176 000000B4 0D0A                    	db	0Dh, 0Ah
   177 000000B6 564553412045444944-     	db	"VESA EDID reading program for TRDOS 386 v2"
   177 000000BF 2072656164696E6720-
   177 000000C8 70726F6772616D2066-
   177 000000D1 6F72205452444F5320-
   177 000000DA 333836207632       
   178 000000E0 0D0A                    	db	0Dh, 0Ah
   179 000000E2 6279204572646F6761-     	db	"by Erdogan TAN (19/01/2021)"
   179 000000EB 6E2054414E20283139-
   179 000000F4 2F30312F3230323129 
   180 000000FD 0D0A0D0A00              	db	0Dh, 0Ah, 0Dh, 0Ah, 0
   181                                  
   182                                  edid_header:
   183 00000102 45444944203A0D0A0D-     	db	"EDID :", 0Dh, 0Ah, 0Dh, 0Ah	
   183 0000010B 0A                 
   184                                  edid_row:
   185 0000010C 20                      	db	20h
   186                                  edid_row_chars:	
   187 0000010D 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   187 00000116 306820303068203030-
   187 0000011F 682030306820303068-
   187 00000128 2030306820         
   188 0000012D 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   188 00000136 306820303068203030-
   188 0000013F 682030306820303068-
   188 00000148 2030306820         
   189 0000014D 0D0A00                  	db	0Dh, 0Ah, 0
   190                                  
   191                                  edid_rerr_msg:
   192 00000150 454449442072656164-     	db	"EDID read error !"
   192 00000159 206572726F722021   
   193 00000161 0D0A                    	db	0Dh, 0Ah
   194 00000163 284544494420697320-     	db	"(EDID is not ready or Video Bios function error!)"
   194 0000016C 6E6F74207265616479-
   194 00000175 206F7220566964656F-
   194 0000017E 2042696F732066756E-
   194 00000187 6374696F6E20657272-
   194 00000190 6F722129           
   195 00000194 0D0A00                  	db	0Dh, 0Ah, 0
   196                                  
   197                                  ;=============================================================================
   198                                  ;        	uninitialized data
   199                                  ;=============================================================================
   200                                  
   201                                  bss_start:
   202                                  
   203                                  ABSOLUTE bss_start
   204                                  
   205 00000197 ??                      alignb 2
   206                                  
   207                                  buffer:
   208                                  
   209                                  edid_buffer:
   210                                  
   211 00000198 <res 80h>               	resb	128
   212                                  		
   213                                  bss_clear_end:
   214                                  
   215                                  bss_end:	 	
