1 ; **************************************************************************** 2 ; clear13h.s - TRDOS 386 (TRDOS v2.0.3) Test Program - reset mode 3 after 13h 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 08/12/2020 (07/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) , , 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 ; Screen will be cleared and if there is, 90 ; mode 03h defect (after mode 13h) will be fixed. 91 92 ; get status of vesa vbe3 protected mode interface 93 00000000 31DB xor ebx, ebx 94 00000002 66BB0209 mov bx, 0902h 95 sys _video 95 <1> 95 <1> 95 <1> 95 <1> 95 <1> %if %0 >= 2 95 <1> mov ebx, %2 95 <1> %if %0 >= 3 95 <1> mov ecx, %3 95 <1> %if %0 = 4 95 <1> mov edx, %4 95 <1> %endif 95 <1> %endif 95 <1> %endif 95 00000006 B81F000000 <1> mov eax, %1 95 <1> 95 0000000B CD40 <1> int 40h 96 97 0000000D 08C0 or al, al 98 0000000F 7446 jz short clearscreen ; vbe3 pmi is not available 99 100 00000011 88C3 mov bl, al ; 1 (disabled) or 2 (enabled) 101 00000013 FECB dec bl ; 0 (disabled) or 1 (enabled) 102 00000015 881D[AE000000] mov [pmi32status], bl 103 0000001B 7509 jnz short pmistatus1 ; 1 104 ; Enable pmi32 105 0000001D FEC3 inc bl ; 0 -> 1 106 ;mov bh, 9 107 sys _video 107 <1> 107 <1> 107 <1> 107 <1> 107 <1> %if %0 >= 2 107 <1> mov ebx, %2 107 <1> %if %0 >= 3 107 <1> mov ecx, %3 107 <1> %if %0 = 4 107 <1> mov edx, %4 107 <1> %endif 107 <1> %endif 107 <1> %endif 107 0000001F B81F000000 <1> mov eax, %1 107 <1> 107 00000024 CD40 <1> int 40h 108 pmistatus1: 109 ; Set video mode to 13h 110 00000026 66B81300 mov ax, 13h 111 0000002A CD31 int 31h ; int 10h in x86 real mode 112 113 ; write message in mode 13h 114 sys _msg, clearmsg, 255, 0Fh 114 <1> 114 <1> 114 <1> 114 <1> 114 <1> %if %0 >= 2 114 0000002C BB[66000000] <1> mov ebx, %2 114 <1> %if %0 >= 3 114 00000031 B9FF000000 <1> mov ecx, %3 114 <1> %if %0 = 4 114 00000036 BA0F000000 <1> mov edx, %4 114 <1> %endif 114 <1> %endif 114 <1> %endif 114 0000003B B823000000 <1> mov eax, %1 114 <1> 114 00000040 CD40 <1> int 40h 115 ; message with white color 116 ; (max. 255 chars) 117 118 ; Set video mode to 03h 119 00000042 66B80300 mov ax, 3 120 00000046 CD31 int 31h 121 122 ; restore status of vesa vbe3 pmi 123 00000048 8A1D[AE000000] mov bl, [pmi32status] 124 0000004E B709 mov bh, 09h 125 sys _video 125 <1> 125 <1> 125 <1> 125 <1> 125 <1> %if %0 >= 2 125 <1> mov ebx, %2 125 <1> %if %0 >= 3 125 <1> mov ecx, %3 125 <1> %if %0 = 4 125 <1> mov edx, %4 125 <1> %endif 125 <1> %endif 125 <1> %endif 125 00000050 B81F000000 <1> mov eax, %1 125 <1> 125 00000055 CD40 <1> int 40h 126 clearscreen: 127 ; Set video mode to 03h (clear screen) 128 00000057 66B80300 mov ax, 3 129 0000005B CD31 int 31h 130 131 sys _exit 131 <1> 131 <1> 131 <1> 131 <1> 131 <1> %if %0 >= 2 131 <1> mov ebx, %2 131 <1> %if %0 >= 3 131 <1> mov ecx, %3 131 <1> %if %0 = 4 131 <1> mov edx, %4 131 <1> %endif 131 <1> %endif 131 <1> %endif 131 0000005D B801000000 <1> mov eax, %1 131 <1> 131 00000062 CD40 <1> int 40h 132 here: 133 00000064 EBFE jmp short here 134 135 ;----------------------------------------------------------------- 136 ; MESSAGE 137 ;----------------------------------------------------------------- 138 139 clearmsg: 140 00000066 0D0A db 0Dh, 0Ah 141 00000068 53637265656E207769- db "Screen will be cleared !" 141 00000071 6C6C20626520636C65- 141 0000007A 617265642021 142 00000080 0D0A00 db 0Dh, 0Ah,0 143 144 00000083 4572646F67616E2054- db "Erdogan Tan - 08/12/2020 (TRDOS 386 v2.0.3)" 144 0000008C 616E202D2030382F31- 144 00000095 322F32303230202854- 144 0000009E 52444F532033383620- 144 000000A7 76322E302E3329 145 pmi32status: 146 000000AE 00 db 0