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) , , 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 resb 128 212 213 bss_clear_end: 214 215 bss_end: