     1                                  ; ****************************************************************************
     2                                  ; edid.asm - TRDOS 386 (TRDOS v2.0.3) Test Program - MSDOS version
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 19/01/2021 (Erdogan Tan)
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  
     9                                  ;========================================================================
    10                                  ; READ VESA EDID (MONITOR INFO) 
    11                                  ;========================================================================
    12                                  
    13                                  ; Modified from TRDOS 386 version (edid.s)
    14                                  
    15                                  [BITS 16]
    16                                  
    17                                  [ORG 100h] 
    18                                  START_CODE:
    19 00000000 BE[7F00]                		mov	si, TrDOS_Welcome
    20 00000003 E82B00                  		call	print_msg
    21                                  
    22                                  		; Read EDID
    23 00000006 B8154F                  		mov	ax, 4F15h
    24 00000009 B301                    		mov	bl, 01h
    25 0000000B 31D2                    		xor	dx, dx
    26 0000000D 31C9                    		xor	cx, cx
    27                                  		;push	cs
    28                                  		;pop	es
    29 0000000F BF[7401]                		mov	di, edid_buffer	
    30 00000012 CD10                    		int	10h
    31                                  
    32 00000014 83F84F                  		cmp	ax, 4Fh
    33 00000017 7510                    		jne	short edid_read_error
    34                                  
    35 00000019 BE[DD00]                		mov	si, edid_header
    36 0000001C E81200                  		call	print_msg
    37                                  
    38 0000001F BE[7401]                		mov	si, edid_buffer
    39 00000022 E81B00                  		call	convert_to_hex_tbl
    40                                  	
    41                                  terminate:
    42 00000025 CD20                    		int	20h
    43                                  here:
    44 00000027 EBFE                    		jmp	short here
    45                                  
    46                                  edid_read_error:
    47 00000029 BE[2C01]                		mov	si, edid_rerr_msg
    48 0000002C E80200                  		call	print_msg
    49 0000002F EBF4                    		jmp	short terminate
    50                                  
    51                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    52                                  ; Subroutine - print text/message on display
    53                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    54                                  
    55                                  print_msg:
    56 00000031 BB0700                  		mov	bx, 07h
    57 00000034 B40E                    		mov	ah, 0Eh
    58                                  ploop:
    59 00000036 AC                      		lodsb
    60 00000037 08C0                    		or	al, al
    61 00000039 7404                    		jz	short pexit
    62 0000003B CD10                    		int	10h
    63 0000003D EBF7                    		jmp	short ploop
    64                                  pexit:			
    65 0000003F C3                      		retn
    66                                  
    67                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    68                                  ; Subroutine - Convert to hexadecimal character table
    69                                  ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    70                                  
    71                                  convert_to_hex_tbl:
    72                                  	; si = binary table address
    73                                  
    74 00000040 B90800                  	mov	cx, 8
    75                                  _h_1:
    76 00000043 51                      	push	cx
    77 00000044 B110                    	mov	cl, 16
    78 00000046 BF[E700]                	mov	di, edid_row_chars - 2
    79                                  _h_2:
    80                                  	;add	di, 2
    81 00000049 47                      	inc	di
    82 0000004A 47                      	inc	di
    83 0000004B AC                      	lodsb
    84 0000004C 30FF                    	xor	bh, bh
    85 0000004E 88C3                    	mov	bl, al
    86 00000050 80E30F                  	and	bl, 0Fh ; low 4 bits
    87                                  
    88 00000053 8AA7[6F00]              	mov	ah, [_hexchars+bx]
    89 00000057 C0E804                  	shr	al, 4  ; high 4 bits
    90 0000005A 88C3                    	mov	bl, al
    91 0000005C 8A87[6F00]              	mov	al, [_hexchars+bx]	
    92 00000060 AB                      	stosw	
    93 00000061 E2E6                    	loop	_h_2		
    94                                  
    95 00000063 56                      	push	si
    96 00000064 BE[E800]                	mov	si, edid_row
    97 00000067 E8C7FF                  	call	print_msg
    98 0000006A 5E                      	pop	si
    99                                  
   100 0000006B 59                      	pop	cx
   101 0000006C E2D5                    	loop	_h_1
   102                                  
   103 0000006E C3                      	retn
   104                                  
   105                                  _hexchars: 
   106 0000006F 303132333435363738-     	db	"0123456789ABCDEF"
   106 00000078 39414243444546     
   107                                  
   108                                  ;=============================================================================
   109                                  ;        	initialized data
   110                                  ;=============================================================================		
   111                                  
   112                                  ;-----------------------------------------------------------------------------
   113                                  ;  MESSAGES
   114                                  ;-----------------------------------------------------------------------------
   115                                  
   116                                  TrDOS_Welcome:
   117 0000007F 0D0A                    	db	0Dh, 0Ah
   118 00000081 564553412045444944-     	db	"VESA EDID reading program for TRDOS 386 v2 (MSDOS version)"
   118 0000008A 2072656164696E6720-
   118 00000093 70726F6772616D2066-
   118 0000009C 6F72205452444F5320-
   118 000000A5 33383620763220284D-
   118 000000AE 53444F532076657273-
   118 000000B7 696F6E29           
   119 000000BB 0D0A                    	db	0Dh, 0Ah
   120 000000BD 6279204572646F6761-     	db	"by Erdogan TAN (19/01/2021)"
   120 000000C6 6E2054414E20283139-
   120 000000CF 2F30312F3230323129 
   121 000000D8 0D0A0D0A00              	db	0Dh, 0Ah, 0Dh, 0Ah, 0
   122                                  
   123                                  edid_header:
   124 000000DD 45444944203A0D0A0D-     	db	"EDID :", 0Dh, 0Ah, 0Dh, 0Ah,0	
   124 000000E6 0A00               
   125                                  edid_row:
   126 000000E8 20                      	db	20h
   127                                  edid_row_chars:	
   128 000000E9 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   128 000000F2 306820303068203030-
   128 000000FB 682030306820303068-
   128 00000104 2030306820         
   129 00000109 303068203030682030-     	db	"00h 00h 00h 00h 00h 00h 00h 00h "
   129 00000112 306820303068203030-
   129 0000011B 682030306820303068-
   129 00000124 2030306820         
   130 00000129 0D0A00                  	db	0Dh, 0Ah, 0
   131                                  
   132                                  edid_rerr_msg:
   133 0000012C 454449442072656164-     	db	"EDID read error !"
   133 00000135 206572726F722021   
   134 0000013D 0D0A                    	db	0Dh, 0Ah
   135 0000013F 284544494420697320-     	db	"(EDID is not ready or Video Bios function error!)"
   135 00000148 6E6F74207265616479-
   135 00000151 206F7220566964656F-
   135 0000015A 2042696F732066756E-
   135 00000163 6374696F6E20657272-
   135 0000016C 6F722129           
   136 00000170 0D0A00                  	db	0Dh, 0Ah, 0
   137                                  
   138                                  ;=============================================================================
   139                                  ;        	uninitialized data
   140                                  ;=============================================================================
   141                                  
   142                                  bss_start:
   143                                  
   144                                  ABSOLUTE bss_start
   145                                  
   146 00000173 <res 00000001>          alignb 2
   147                                  
   148                                  buffer:
   149                                  
   150                                  edid_buffer:
   151                                  
   152 00000174 <res 00000080>          	resb	128
   153                                  		
   154                                  bss_clear_end:
   155                                  
   156                                  bss_end:	 	
