     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[C5000000]            		mov	esi, TrDOS_Welcome
    90 00000005 E859000000              		call	print_msg
    91                                  
    92                                  		sys	_video, 0F00h, edid_buffer  ; read edid
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1> 
    92                              <1>  %if %0 >= 2
    92 0000000A BB000F0000          <1>  mov ebx, %2
    92                              <1>  %if %0 >= 3
    92 0000000F B9[AA010000]        <1>  mov ecx, %3
    92                              <1>  %if %0 = 4
    92                              <1>  mov edx, %4
    92                              <1>  %endif
    92                              <1>  %endif
    92                              <1>  %endif
    92 00000014 B81F000000          <1>  mov eax, %1
    92                              <1> 
    92 00000019 CD40                <1>  int 40h
    93                                  	
    94 0000001B 3D80000000              		cmp	eax, 128
    95 00000020 7535                    		jne	short edid_read_error
    96                                  
    97 00000022 C605[C4000000]0F        		mov	byte [color], 0Fh ; white
    98                                  
    99 00000029 BE[13010000]            		mov	esi, edid_header
   100 0000002E E830000000              		call	print_msg	
   101                                  
   102 00000033 BE[AA010000]            		mov	esi, edid_buffer
   103 00000038 E83B000000              		call	convert_to_hex_tbl
   104                                  
   105 0000003D C605[C4000000]07        		mov	byte [color], 07h ; light gray
   106                                  
   107 00000044 BE[A6010000]            		mov	esi, crlf
   108 00000049 E815000000              		call	print_msg			
   109                                  terminate:
   110                                  		sys	_exit
   110                              <1> 
   110                              <1> 
   110                              <1> 
   110                              <1> 
   110                              <1>  %if %0 >= 2
   110                              <1>  mov ebx, %2
   110                              <1>  %if %0 >= 3
   110                              <1>  mov ecx, %3
   110                              <1>  %if %0 = 4
   110                              <1>  mov edx, %4
   110                              <1>  %endif
   110                              <1>  %endif
   110                              <1>  %endif
   110 0000004E B801000000          <1>  mov eax, %1
   110                              <1> 
   110 00000053 CD40                <1>  int 40h
   111                                  here:
   112 00000055 EBFE                    		jmp	short here
   113                                  
   114                                  edid_read_error:
   115 00000057 BE[62010000]            		mov	esi, edid_rerr_msg
   116 0000005C E802000000              		call	print_msg
   117 00000061 EBEB                    		jmp	short terminate
   118                                  
   119                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   120                                  ; Subroutine - print text/message on display
   121                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   122                                  
   123                                  print_msg:
   124 00000063 8A15[C4000000]          		mov	dl, [color] 
   125                                  		sys 	_msg, esi, 255
   125                              <1> 
   125                              <1> 
   125                              <1> 
   125                              <1> 
   125                              <1>  %if %0 >= 2
   125 00000069 89F3                <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   125 0000006B B9FF000000          <1>  mov ecx, %3
   125                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   125                              <1>  %endif
   125                              <1>  %endif
   125                              <1>  %endif
   125 00000070 B823000000          <1>  mov eax, %1
   125                              <1> 
   125 00000075 CD40                <1>  int 40h
   126                                  				; message with color 
   127                                  				; (max. 255 chars)
   128 00000077 C3                      		retn
   129                                  
   130                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   131                                  ; Subroutine - Convert to hexadecimal character table
   132                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   133                                  
   134                                  convert_to_hex_tbl:
   135                                  	; esi = binary table address
   136                                  
   137 00000078 B908000000              	mov	ecx, 8
   138                                  _h_1:
   139 0000007D 51                      	push	ecx
   140 0000007E B110                    	mov	cl, 16
   141 00000080 BF[1D010000]            	mov	edi, edid_row_chars - 2
   142                                  _h_2:
   143                                  	;add	edi, 2
   144 00000085 47                      	inc	edi
   145 00000086 47                      	inc	edi
   146 00000087 AC                      	lodsb
   147 00000088 31DB                    	xor	ebx, ebx
   148 0000008A 88C3                    	mov	bl, al
   149 0000008C 80E30F                  	and	bl, 0Fh ; low 4 bits
   150                                  
   151 0000008F 8AA3[B4000000]          	mov	ah, [_hexchars+ebx]
   152 00000095 C0E804                  	shr	al, 4  ; high 4 bits
   153 00000098 88C3                    	mov	bl, al
   154 0000009A 8A83[B4000000]          	mov	al, [_hexchars+ebx]	
   155 000000A0 66AB                    	stosw	
   156 000000A2 E2E1                    	loop	_h_2		
   157                                  
   158 000000A4 56                      	push	esi
   159 000000A5 BE[1E010000]            	mov	esi, edid_row
   160 000000AA E8B4FFFFFF              	call	print_msg
   161 000000AF 5E                      	pop	esi
   162                                  
   163 000000B0 59                      	pop	ecx
   164 000000B1 E2CA                    	loop	_h_1
   165                                  
   166 000000B3 C3                      	retn
   167                                  
   168                                  _hexchars: 
   169 000000B4 303132333435363738-     	db	"0123456789ABCDEF"
   169 000000BD 39414243444546     
   170 000000C4 07                      color:	db	07h
   171                                  
   172                                  ;=============================================================================
   173                                  ;        	initialized data
   174                                  ;=============================================================================		
   175                                  
   176                                  ;-----------------------------------------------------------------------------
   177                                  ;  MESSAGES
   178                                  ;-----------------------------------------------------------------------------
   179                                  
   180                                  TrDOS_Welcome:
   181 000000C5 0D0A                    	db	0Dh, 0Ah
   182 000000C7 564553412045444944-     	db	"VESA EDID reading program for TRDOS 386 v2"
   182 000000D0 2072656164696E6720-
   182 000000D9 70726F6772616D2066-
   182 000000E2 6F72205452444F5320-
   182 000000EB 333836207632       
   183 000000F1 0D0A                    	db	0Dh, 0Ah
   184 000000F3 6279204572646F6761-     	db	"by Erdogan TAN (19/01/2021)"
   184 000000FC 6E2054414E20283139-
   184 00000105 2F30312F3230323129 
   185 0000010E 0D0A0D0A00              	db	0Dh, 0Ah, 0Dh, 0Ah, 0
   186                                  
   187                                  edid_header:
   188 00000113 45444944203A0D0A0D-     	db	"EDID :", 0Dh, 0Ah, 0Dh, 0Ah, 0	
   188 0000011C 0A00               
   189                                  edid_row:
   190 0000011E 20                      	db	20h
   191                                  edid_row_chars:	
   192 0000011F 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   192 00000128 306820303068203030-
   192 00000131 682030306820303068-
   192 0000013A 2030306820         
   193 0000013F 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   193 00000148 306820303068203030-
   193 00000151 682030306820303068-
   193 0000015A 2030306820         
   194 0000015F 0D0A00                  	db	0Dh, 0Ah, 0
   195                                  
   196                                  edid_rerr_msg:
   197 00000162 454449442072656164-     	db	"EDID read error !"
   197 0000016B 206572726F722021   
   198 00000173 0D0A                    	db	0Dh, 0Ah
   199 00000175 284544494420697320-     	db	"(EDID is not ready or Video Bios function error!)"
   199 0000017E 6E6F74207265616479-
   199 00000187 206F7220566964656F-
   199 00000190 2042696F732066756E-
   199 00000199 6374696F6E20657272-
   199 000001A2 6F722129           
   200                                  crlf:
   201 000001A6 0D0A00                  	db	0Dh, 0Ah, 0
   202                                  
   203                                  ;=============================================================================
   204                                  ;        	uninitialized data
   205                                  ;=============================================================================
   206                                  
   207                                  bss_start:
   208                                  
   209                                  ABSOLUTE bss_start
   210                                  
   211 000001A9 <res 00000001>          alignb 2
   212                                  
   213                                  buffer:
   214                                  
   215                                  edid_buffer:
   216                                  
   217 000001AA <res 00000080>          	resb	128
   218                                  		
   219                                  bss_clear_end:
   220                                  
   221                                  bss_end:	 	
