     1                                  ; ****************************************************************************
     2                                  ; blocks8.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 27/02/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm blocks5.s -l blocks5.txt -o BLOCKS5.PRG -Z error.txt
     9                                  ; (modified from 'blocks5.s', 26/02/2021)
    10                                  
    11                                  ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 101h)
    12                                  ; (mask color version)
    13                                  
    14                                  ; 14/07/2020
    15                                  ; 31/12/2017
    16                                  ; TRDOS 386 (v2.0) system calls
    17                                  _ver 	equ 0
    18                                  _exit 	equ 1
    19                                  _fork 	equ 2
    20                                  _read 	equ 3
    21                                  _write	equ 4
    22                                  _open	equ 5
    23                                  _close 	equ 6
    24                                  _wait 	equ 7
    25                                  _create	equ 8
    26                                  _rename	equ 9
    27                                  _delete	equ 10
    28                                  _exec	equ 11
    29                                  _chdir	equ 12
    30                                  _time 	equ 13
    31                                  _mkdir 	equ 14
    32                                  _chmod	equ 15
    33                                  _rmdir	equ 16
    34                                  _break	equ 17
    35                                  _drive	equ 18
    36                                  _seek	equ 19
    37                                  _tell 	equ 20
    38                                  _memory	equ 21
    39                                  _prompt	equ 22
    40                                  _path	equ 23
    41                                  _env	equ 24
    42                                  _stime	equ 25
    43                                  _quit	equ 26	
    44                                  _intr	equ 27
    45                                  _dir	equ 28
    46                                  _emt 	equ 29
    47                                  _ldrvt 	equ 30
    48                                  _video 	equ 31
    49                                  _audio	equ 32
    50                                  _timer	equ 33
    51                                  _sleep	equ 34
    52                                  _msg    equ 35
    53                                  _geterr	equ 36
    54                                  _fpstat	equ 37
    55                                  _pri	equ 38
    56                                  _rele	equ 39
    57                                  _fff	equ 40
    58                                  _fnf	equ 41
    59                                  _alloc	equ 42
    60                                  _dalloc equ 43
    61                                  _calbac equ 44
    62                                  _dma	equ 45	
    63                                  
    64                                  %macro sys 1-4
    65                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    66                                      ; 03/09/2015	
    67                                      ; 13/04/2015
    68                                      ; Retro UNIX 386 v1 system call.		
    69                                      %if %0 >= 2   
    70                                          mov ebx, %2
    71                                          %if %0 >= 3    
    72                                              mov ecx, %3
    73                                              %if %0 = 4
    74                                                 mov edx, %4   
    75                                              %endif
    76                                          %endif
    77                                      %endif
    78                                      mov eax, %1
    79                                      ;int 30h
    80                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    81                                  %endmacro
    82                                  
    83                                  ; Retro UNIX 386 v1 system call format:
    84                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    85                                  
    86                                  [BITS 32] ; We need 32-bit intructions for protected mode
    87                                  
    88                                  [ORG 0] 
    89                                  
    90                                  START_CODE:
    91                                  	; clear bss
    92 00000000 BF[A4040000]            	mov	edi, bss_start
    93 00000005 B9813E0000              	mov	ecx, (bss_end - bss_start)/4
    94                                  	;xor	eax, eax
    95 0000000A F3AB                    	rep	stosd
    96                                  
    97                                  	; program message
    98 0000000C BE[E0030000]            	mov	esi, program_msg
    99 00000011 E896030000              	call	print_msg
   100                                  
   101 00000016 30E4                    	xor	ah, ah
   102                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   103                                  			; Return: AH = scan code, AL = character
   104 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   105                                  
   106                                  	;; Set Video Mode to 13h
   107                                  	;sys	_video, 0813h
   108                                  	;cmp	eax, 14h 
   109                                  	;je	short mode_13h_set_ok
   110                                  	;jmp	terminate
   111                                  
   112                                  	; set VGA mode by using int 31h
   113 0000001A 66B81300                	mov	ax, 13h	; mode 13h ; 
   114 0000001E CD31                    	int	31h	; real mode: int 10h
   115                                  	;jmp	short mode_13h_set_ok
   116                                  
   117                                  mode_13h_set_ok: 
   118                                  	; full screen - white color 
   119 00000020 B90F0F0F0F              	mov	ecx, 0F0F0F0Fh ; white
   120 00000025 BB01010000              	mov	ebx, 0101h ; Full screen, new color
   121                                  	sys	_video
   121                              <1> 
   121                              <1> 
   121                              <1> 
   121                              <1> 
   121                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   121                              <1>  %if %0 >= 3
   121                              <1>  mov ecx, %3
   121                              <1>  %if %0 = 4
   121                              <1>  mov edx, %4
   121                              <1>  %endif
   121                              <1>  %endif
   121                              <1>  %endif
   121 0000002A B81F000000          <1>  mov eax, %1
   121                              <1> 
   121 0000002F CD40                <1>  int 40h
   122                                  
   123                                  	;mov	byte [tcolor], 0
   124 00000031 BE48004400              	mov	esi, 68*65536+72
   125 00000036 BD[91040000]            	mov	ebp, txt_white
   126 0000003B E87D030000               	call	print_text
   127                                  
   128 00000040 E83D030000              	call	waitforkey
   129                                  
   130                                  	; Mask color = black
   131                                  	; full screen NOT (except mask color)
   132                                  	;mov	edi, 0 ; Black
   133 00000045 29FF                    	sub	edi, edi
   134 00000047 BB27010000              	mov	ebx, 0127h ; masked 'NOT', full screen
   135                                  	sys	_video
   135                              <1> 
   135                              <1> 
   135                              <1> 
   135                              <1> 
   135                              <1>  %if %0 >= 2
   135                              <1>  mov ebx, %2
   135                              <1>  %if %0 >= 3
   135                              <1>  mov ecx, %3
   135                              <1>  %if %0 = 4
   135                              <1>  mov edx, %4
   135                              <1>  %endif
   135                              <1>  %endif
   135                              <1>  %endif
   135 0000004C B81F000000          <1>  mov eax, %1
   135                              <1> 
   135 00000051 CD40                <1>  int 40h
   136                                  	
   137 00000053 E82A030000              	call	waitforkey
   138                                  
   139                                  	; full screen replace color (replace black colors)
   140 00000058 B100                    	mov	cl, 0 ; BLACK
   141 0000005A B20F                    	mov	dl, 0Fh ; WHITE
   142 0000005C B30C                    	mov	bl, 0Ch
   143                                  	sys	_video
   143                              <1> 
   143                              <1> 
   143                              <1> 
   143                              <1> 
   143                              <1>  %if %0 >= 2
   143                              <1>  mov ebx, %2
   143                              <1>  %if %0 >= 3
   143                              <1>  mov ecx, %3
   143                              <1>  %if %0 = 4
   143                              <1>  mov edx, %4
   143                              <1>  %endif
   143                              <1>  %endif
   143                              <1>  %endif
   143 0000005E B81F000000          <1>  mov eax, %1
   143                              <1> 
   143 00000063 CD40                <1>  int 40h
   144                                  	
   145 00000065 E818030000              	call	waitforkey
   146                                  
   147                                  	; full screen - blue color 
   148                                  
   149 0000006A B920202020              	mov	ecx, 20202020h ; blue
   150 0000006F B301                    	mov	bl, 01h ; Full screen, new color
   151                                  	sys	_video
   151                              <1> 
   151                              <1> 
   151                              <1> 
   151                              <1> 
   151                              <1>  %if %0 >= 2
   151                              <1>  mov ebx, %2
   151                              <1>  %if %0 >= 3
   151                              <1>  mov ecx, %3
   151                              <1>  %if %0 = 4
   151                              <1>  mov edx, %4
   151                              <1>  %endif
   151                              <1>  %endif
   151                              <1>  %endif
   151 00000071 B81F000000          <1>  mov eax, %1
   151                              <1> 
   151 00000076 CD40                <1>  int 40h
   152                                  
   153 00000078 C605[A4040000]0F        	mov	byte [tcolor], 0Fh
   154 0000007F BE5A004400              	mov	esi, 68*65536+90
   155 00000084 BD[7B040000]            	mov	ebp, txt_blue
   156 00000089 E82F030000               	call	print_text
   157                                  
   158 0000008E E8EF020000              	call	waitforkey
   159                                  
   160                                  	; Mask color = white
   161                                  	; full screen NOT (except mask color)
   162 00000093 BF0F000000              	mov	edi, 0Fh
   163 00000098 B327                    	mov	bl, 27h ; masked 'NOT', full screen
   164                                  	sys	_video
   164                              <1> 
   164                              <1> 
   164                              <1> 
   164                              <1> 
   164                              <1>  %if %0 >= 2
   164                              <1>  mov ebx, %2
   164                              <1>  %if %0 >= 3
   164                              <1>  mov ecx, %3
   164                              <1>  %if %0 = 4
   164                              <1>  mov edx, %4
   164                              <1>  %endif
   164                              <1>  %endif
   164                              <1>  %endif
   164 0000009A B81F000000          <1>  mov eax, %1
   164                              <1> 
   164 0000009F CD40                <1>  int 40h
   165                                  
   166 000000A1 E8DC020000              	call	waitforkey
   167                                  	
   168 000000A6 B928282828              	mov	ecx, 28282828h ; RED
   169 000000AB B301                    	mov	bl, 01h ; Full screen, new color
   170                                  	sys	_video
   170                              <1> 
   170                              <1> 
   170                              <1> 
   170                              <1> 
   170                              <1>  %if %0 >= 2
   170                              <1>  mov ebx, %2
   170                              <1>  %if %0 >= 3
   170                              <1>  mov ecx, %3
   170                              <1>  %if %0 = 4
   170                              <1>  mov edx, %4
   170                              <1>  %endif
   170                              <1>  %endif
   170                              <1>  %endif
   170 000000AD B81F000000          <1>  mov eax, %1
   170                              <1> 
   170 000000B2 CD40                <1>  int 40h
   171                                  
   172                                  	;mov	byte [tcolor], 0Fh
   173 000000B4 BE6C004400              	mov	esi, 68*65536+108
   174 000000B9 BD[80040000]            	mov	ebp, txt_red
   175 000000BE E8FA020000               	call	print_text
   176                                  
   177 000000C3 E8BA020000              	call	waitforkey
   178                                  
   179                                  	; Mask color = red
   180                                  	; full screen NEW COLOR (except mask color)
   181 000000C8 BF28000000              	mov	edi, 28h ; mask color, RED
   182 000000CD B12C                    	mov	cl, 2Ch ; YELLOW
   183 000000CF B321                    	mov	bl, 21h ; masked new color, full screen
   184                                  	sys	_video
   184                              <1> 
   184                              <1> 
   184                              <1> 
   184                              <1> 
   184                              <1>  %if %0 >= 2
   184                              <1>  mov ebx, %2
   184                              <1>  %if %0 >= 3
   184                              <1>  mov ecx, %3
   184                              <1>  %if %0 = 4
   184                              <1>  mov edx, %4
   184                              <1>  %endif
   184                              <1>  %endif
   184                              <1>  %endif
   184 000000D1 B81F000000          <1>  mov eax, %1
   184                              <1> 
   184 000000D6 CD40                <1>  int 40h
   185                                  
   186 000000D8 E8A5020000              	call	waitforkey
   187                                  	
   188                                  	; full screen replace color (replace yellow colors)
   189 000000DD B12C                    	mov	cl, 2Ch ; YELLOW
   190 000000DF B228                    	mov	dl, 28h ; RED
   191 000000E1 B30C                    	mov	bl, 0Ch
   192                                  	sys	_video
   192                              <1> 
   192                              <1> 
   192                              <1> 
   192                              <1> 
   192                              <1>  %if %0 >= 2
   192                              <1>  mov ebx, %2
   192                              <1>  %if %0 >= 3
   192                              <1>  mov ecx, %3
   192                              <1>  %if %0 = 4
   192                              <1>  mov edx, %4
   192                              <1>  %endif
   192                              <1>  %endif
   192                              <1>  %endif
   192 000000E3 B81F000000          <1>  mov eax, %1
   192                              <1> 
   192 000000E8 CD40                <1>  int 40h
   193                                  
   194 000000EA E893020000              	call	waitforkey
   195                                  
   196                                  	; full screen - green color
   197                                  
   198 000000EF B930303030              	mov	ecx, 30303030h ; green
   199 000000F4 BB01010000              	mov	ebx, 0101h ; Full screen, new color
   200                                  	sys	_video
   200                              <1> 
   200                              <1> 
   200                              <1> 
   200                              <1> 
   200                              <1>  %if %0 >= 2
   200                              <1>  mov ebx, %2
   200                              <1>  %if %0 >= 3
   200                              <1>  mov ecx, %3
   200                              <1>  %if %0 = 4
   200                              <1>  mov edx, %4
   200                              <1>  %endif
   200                              <1>  %endif
   200                              <1>  %endif
   200 000000F9 B81F000000          <1>  mov eax, %1
   200                              <1> 
   200 000000FE CD40                <1>  int 40h
   201                                  
   202 00000100 C605[A4040000]00        	mov	byte [tcolor], 0
   203 00000107 BE48004400              	mov	esi, 68*65536+72
   204 0000010C BD[84040000]            	mov	ebp, txt_green
   205 00000111 E8A7020000               	call	print_text
   206                                  
   207 00000116 E867020000              	call	waitforkey
   208                                  
   209                                  	; Masked new color
   210 0000011B BF30000000              	mov	edi, 30h ; mask color, GREEN
   211 00000120 B10F                    	mov	cl, 0Fh ; WHITE
   212 00000122 B321                    	mov	bl, 21h ; masked new color, full screen
   213                                  	sys	_video
   213                              <1> 
   213                              <1> 
   213                              <1> 
   213                              <1> 
   213                              <1>  %if %0 >= 2
   213                              <1>  mov ebx, %2
   213                              <1>  %if %0 >= 3
   213                              <1>  mov ecx, %3
   213                              <1>  %if %0 = 4
   213                              <1>  mov edx, %4
   213                              <1>  %endif
   213                              <1>  %endif
   213                              <1>  %endif
   213 00000124 B81F000000          <1>  mov eax, %1
   213                              <1> 
   213 00000129 CD40                <1>  int 40h
   214                                  
   215 0000012B E852020000              	call	waitforkey
   216                                  	
   217                                  	; Masked mix colors
   218 00000130 BF0F000000              	mov	edi, 0Fh ; mask color, WHITE
   219 00000135 B110                    	mov	cl, 10h  ; (result must be blue from green) 
   220 00000137 B32B                    	mov	bl, 2Bh  ; masked MIX colors, full screen
   221                                  	sys	_video
   221                              <1> 
   221                              <1> 
   221                              <1> 
   221                              <1> 
   221                              <1>  %if %0 >= 2
   221                              <1>  mov ebx, %2
   221                              <1>  %if %0 >= 3
   221                              <1>  mov ecx, %3
   221                              <1>  %if %0 = 4
   221                              <1>  mov edx, %4
   221                              <1>  %endif
   221                              <1>  %endif
   221                              <1>  %endif
   221 00000139 B81F000000          <1>  mov eax, %1
   221                              <1> 
   221 0000013E CD40                <1>  int 40h
   222                                  
   223 00000140 E83D020000              	call	waitforkey
   224                                  
   225                                  	; full screen - yellow color
   226                                  
   227 00000145 B92C2C2C2C              	mov	ecx, 2C2C2C2Ch ; yellow
   228                                  	;mov	ebx, 0101h ; Full screen, new color
   229 0000014A B301                    	mov	bl, 01h
   230                                  	sys	_video
   230                              <1> 
   230                              <1> 
   230                              <1> 
   230                              <1> 
   230                              <1>  %if %0 >= 2
   230                              <1>  mov ebx, %2
   230                              <1>  %if %0 >= 3
   230                              <1>  mov ecx, %3
   230                              <1>  %if %0 = 4
   230                              <1>  mov edx, %4
   230                              <1>  %endif
   230                              <1>  %endif
   230                              <1>  %endif
   230 0000014C B81F000000          <1>  mov eax, %1
   230                              <1> 
   230 00000151 CD40                <1>  int 40h
   231                                  
   232                                  	;mov	byte [tcolor], 0
   233 00000153 BE36004400              	mov	esi, 68*65536+54
   234 00000158 BD[8A040000]            	mov	ebp, txt_yellow
   235 0000015D E85B020000               	call	print_text
   236                                  
   237 00000162 E81B020000              	call	waitforkey
   238                                  
   239                                  	; masked add color
   240 00000167 31FF                    	xor	edi, edi ; mask color is BLACK 
   241 00000169 B110                    	mov	cl, 10h	; add 10h to current color
   242 0000016B B322                    	mov	bl, 22h
   243                                  	sys	_video
   243                              <1> 
   243                              <1> 
   243                              <1> 
   243                              <1> 
   243                              <1>  %if %0 >= 2
   243                              <1>  mov ebx, %2
   243                              <1>  %if %0 >= 3
   243                              <1>  mov ecx, %3
   243                              <1>  %if %0 = 4
   243                              <1>  mov edx, %4
   243                              <1>  %endif
   243                              <1>  %endif
   243                              <1>  %endif
   243 0000016D B81F000000          <1>  mov eax, %1
   243                              <1> 
   243 00000172 CD40                <1>  int 40h
   244                                  
   245 00000174 E809020000              	call	waitforkey
   246                                  
   247                                  	; masked sub color
   248                                  	;xor	edi, edi ; mask color is BLACK 
   249 00000179 B110                    	mov	cl, 10h	; sub 10h from current color
   250 0000017B B323                    	mov	bl, 23h
   251                                  	sys	_video
   251                              <1> 
   251                              <1> 
   251                              <1> 
   251                              <1> 
   251                              <1>  %if %0 >= 2
   251                              <1>  mov ebx, %2
   251                              <1>  %if %0 >= 3
   251                              <1>  mov ecx, %3
   251                              <1>  %if %0 = 4
   251                              <1>  mov edx, %4
   251                              <1>  %endif
   251                              <1>  %endif
   251                              <1>  %endif
   251 0000017D B81F000000          <1>  mov eax, %1
   251                              <1> 
   251 00000182 CD40                <1>  int 40h
   252                                  
   253 00000184 E8F9010000              	call	waitforkey
   254                                  
   255                                  	; masked AND colors
   256                                  	;mov	edi, 2Ch  ; mask color is Yellow
   257 00000189 B117                    	mov	cl, 17h	; and 17h with current color
   258 0000018B B325                    	mov	bl, 25h
   259                                  	sys	_video
   259                              <1> 
   259                              <1> 
   259                              <1> 
   259                              <1> 
   259                              <1>  %if %0 >= 2
   259                              <1>  mov ebx, %2
   259                              <1>  %if %0 >= 3
   259                              <1>  mov ecx, %3
   259                              <1>  %if %0 = 4
   259                              <1>  mov edx, %4
   259                              <1>  %endif
   259                              <1>  %endif
   259                              <1>  %endif
   259 0000018D B81F000000          <1>  mov eax, %1
   259                              <1> 
   259 00000192 CD40                <1>  int 40h
   260                                  	
   261 00000194 E8E9010000              	call	waitforkey
   262                                  
   263                                  	; masked OR colors
   264 00000199 BF2C000000              	mov	edi, 2Ch  ; mask color is Yellow
   265 0000019E B120                    	mov	cl, 20h	; or 20h with current color
   266 000001A0 B324                    	mov	bl, 24h
   267                                  	sys	_video
   267                              <1> 
   267                              <1> 
   267                              <1> 
   267                              <1> 
   267                              <1>  %if %0 >= 2
   267                              <1>  mov ebx, %2
   267                              <1>  %if %0 >= 3
   267                              <1>  mov ecx, %3
   267                              <1>  %if %0 = 4
   267                              <1>  mov edx, %4
   267                              <1>  %endif
   267                              <1>  %endif
   267                              <1>  %endif
   267 000001A2 B81F000000          <1>  mov eax, %1
   267                              <1> 
   267 000001A7 CD40                <1>  int 40h
   268                                  	
   269 000001A9 E8D4010000              	call	waitforkey
   270                                  
   271                                  	; masked XOR colors
   272                                  	;mov	edi, 2Ch  ; mask color is Yellow
   273 000001AE B120                    	mov	cl, 20h	; xor 20h with current color
   274 000001B0 B326                    	mov	bl, 26h
   275                                  	sys	_video
   275                              <1> 
   275                              <1> 
   275                              <1> 
   275                              <1> 
   275                              <1>  %if %0 >= 2
   275                              <1>  mov ebx, %2
   275                              <1>  %if %0 >= 3
   275                              <1>  mov ecx, %3
   275                              <1>  %if %0 = 4
   275                              <1>  mov edx, %4
   275                              <1>  %endif
   275                              <1>  %endif
   275                              <1>  %endif
   275 000001B2 B81F000000          <1>  mov eax, %1
   275                              <1> 
   275 000001B7 CD40                <1>  int 40h
   276                                  
   277 000001B9 E8C4010000              	call	waitforkey
   278                                  
   279                                  	; Full screen copy
   280 000001BE BE[A8040000]            	mov	esi, fullscreen_buffer
   281 000001C3 89F7                    	mov	edi, esi
   282 000001C5 31C0                    	xor	eax, eax ; black
   283 000001C7 B990010000              	mov	ecx, (320*5)/4
   284 000001CC F3AB                    	rep	stosd
   285 000001CE B80F0F0F0F              	mov	eax, 0F0F0F0Fh ; white
   286 000001D3 B9A0000000              	mov	ecx, (320*2)/4	
   287 000001D8 F3AB                    	rep	stosd
   288 000001DA 31C0                    	xor	eax, eax ; black
   289 000001DC B9F0000000              	mov	ecx, (320*3)/4	
   290 000001E1 F3AB                    	rep	stosd
   291 000001E3 B820202020              	mov	eax, 20202020h ; blue
   292 000001E8 B9201C0000              	mov	ecx, (320*90)/4
   293 000001ED F3AB                    	rep	stosd
   294 000001EF B828282828              	mov	eax, 28282828h ; red
   295 000001F4 B9201C0000              	mov	ecx, (320*90)/4
   296 000001F9 F3AB                    	rep	stosd
   297 000001FB 31C0                    	xor	eax, eax ; black
   298 000001FD B9F0000000              	mov	ecx, (320*3)/4	
   299 00000202 F3AB                    	rep	stosd
   300 00000204 B80F0F0F0F              	mov	eax, 0F0F0F0Fh ; white
   301 00000209 B9A0000000              	mov	ecx, (320*2)/4	
   302 0000020E F3AB                    	rep	stosd
   303 00000210 31C0                    	xor	eax, eax ; black
   304 00000212 B990010000              	mov	ecx, (320*5)/4	
   305 00000217 F3AB                    	rep	stosd
   306                                  
   307 00000219 BB00010000              	mov	ebx, 0100h ; Full screen copy
   308                                  	sys	_video
   308                              <1> 
   308                              <1> 
   308                              <1> 
   308                              <1> 
   308                              <1>  %if %0 >= 2
   308                              <1>  mov ebx, %2
   308                              <1>  %if %0 >= 3
   308                              <1>  mov ecx, %3
   308                              <1>  %if %0 = 4
   308                              <1>  mov edx, %4
   308                              <1>  %endif
   308                              <1>  %endif
   308                              <1>  %endif
   308 0000021E B81F000000          <1>  mov eax, %1
   308                              <1> 
   308 00000223 CD40                <1>  int 40h
   309                                  
   310 00000225 E858010000              	call	waitforkey
   311                                  
   312 0000022A C605[A4040000]0F        	mov	byte [tcolor], 0Fh
   313                                  
   314 00000231 BE2B001700              	mov	esi, 23*65536+43
   315 00000236 BD[7B040000]            	mov	ebp, txt_blue
   316 0000023B E87D010000               	call	print_text
   317                                  	
   318 00000240 E83D010000              	call	waitforkey
   319                                  
   320 00000245 BE2B007100              	mov	esi, 113*65536+43
   321 0000024A BD[80040000]            	mov	ebp, txt_red
   322 0000024F E869010000               	call	print_text
   323                                  	
   324 00000254 E829010000              	call	waitforkey
   325                                  
   326                                  	; Masked new color, window
   327                                  	; (blue block starts at row 10)
   328                                  	; ((white text color will be changed to black))
   329 00000259 BF20000000              	mov	edi, 20h ; mask color, BLUE
   330 0000025E B100                    	mov	cl, 0 ; BLACK (new color)
   331 00000260 BA28000A00              	mov	edx, 10*65536+40 ; column 40, row 10
   332 00000265 BEA0005A00              	mov	esi, 90*65536+160 ; size: 90*160
   333 0000026A BB31010000              	mov	ebx, 0131h ; Masked new color in window
   334                                  	sys	_video
   334                              <1> 
   334                              <1> 
   334                              <1> 
   334                              <1> 
   334                              <1>  %if %0 >= 2
   334                              <1>  mov ebx, %2
   334                              <1>  %if %0 >= 3
   334                              <1>  mov ecx, %3
   334                              <1>  %if %0 = 4
   334                              <1>  mov edx, %4
   334                              <1>  %endif
   334                              <1>  %endif
   334                              <1>  %endif
   334 0000026F B81F000000          <1>  mov eax, %1
   334                              <1> 
   334 00000274 CD40                <1>  int 40h
   335                                  
   336 00000276 E807010000              	call	waitforkey
   337                                  
   338                                  	; Masked AND colors, window
   339                                  	; (red block starts at row 100)
   340                                  	; ((white text color will be changed to black))
   341 0000027B BF28000000              	mov	edi, 28h ; mask color, RED
   342                                  	;mov	cl, 0 ; BLACK (and color)
   343 00000280 BA28006400              	mov	edx, 100*65536+40 ; column 40, row 100
   344 00000285 BEA0005A00              	mov	esi, 90*65536+160 ; size: 90*160
   345 0000028A BB35010000              	mov	ebx, 0135h ; Masked AND colors in window
   346                                  	sys	_video
   346                              <1> 
   346                              <1> 
   346                              <1> 
   346                              <1> 
   346                              <1>  %if %0 >= 2
   346                              <1>  mov ebx, %2
   346                              <1>  %if %0 >= 3
   346                              <1>  mov ecx, %3
   346                              <1>  %if %0 = 4
   346                              <1>  mov edx, %4
   346                              <1>  %endif
   346                              <1>  %endif
   346                              <1>  %endif
   346 0000028F B81F000000          <1>  mov eax, %1
   346                              <1> 
   346 00000294 CD40                <1>  int 40h
   347                                  
   348 00000296 E8E7000000              	call	waitforkey
   349                                  
   350                                  	; Masked ADD to red block position
   351 0000029B 29FF                    	sub	edi, edi ; mask color, BLACK
   352 0000029D B108                    	mov	cl, 8 ; add 8 to current color
   353 0000029F BA00006400              	mov	edx, 100*65536 ; column 0, row 100
   354 000002A4 BE40015A00              	mov	esi, 90*65536+320 ; size: 90*320
   355                                  	;mov	ebx, 0132h ; add color, window, masked
   356 000002A9 B332                    	mov	bl, 32h
   357                                  	sys	_video	
   357                              <1> 
   357                              <1> 
   357                              <1> 
   357                              <1> 
   357                              <1>  %if %0 >= 2
   357                              <1>  mov ebx, %2
   357                              <1>  %if %0 >= 3
   357                              <1>  mov ecx, %3
   357                              <1>  %if %0 = 4
   357                              <1>  mov edx, %4
   357                              <1>  %endif
   357                              <1>  %endif
   357                              <1>  %endif
   357 000002AB B81F000000          <1>  mov eax, %1
   357                              <1> 
   357 000002B0 CD40                <1>  int 40h
   358                                  
   359 000002B2 E8CB000000              	call	waitforkey
   360                                  
   361                                  	; Masked SUB from blue block position
   362                                  	;sub	edi, edi ; mask color, BLACK
   363                                  	;mov	cl, 8 ; sub 8 from current color
   364 000002B7 BA00000A00              	mov	edx, 10*65536 ; column 0, row 10
   365                                  	;mov	esi, 90*65536+320 ; size: 90*320
   366                                  	;mov	ebx, 0133h ; sub color, window, masked
   367 000002BC B333                    	mov	bl, 33h
   368                                  	sys	_video	
   368                              <1> 
   368                              <1> 
   368                              <1> 
   368                              <1> 
   368                              <1>  %if %0 >= 2
   368                              <1>  mov ebx, %2
   368                              <1>  %if %0 >= 3
   368                              <1>  mov ecx, %3
   368                              <1>  %if %0 = 4
   368                              <1>  mov edx, %4
   368                              <1>  %endif
   368                              <1>  %endif
   368                              <1>  %endif
   368 000002BE B81F000000          <1>  mov eax, %1
   368                              <1> 
   368 000002C3 CD40                <1>  int 40h
   369                                  
   370 000002C5 E8B8000000              	call	waitforkey
   371                                  
   372                                  	; Masked SUB from red block position
   373                                  	;sub	edi, edi ; mask color, BLACK
   374                                  	;mov	cl, 8 ; sub 8 from current color
   375 000002CA BA00006400              	mov	edx, 100*65536 ; column 0, row 100
   376                                  	;mov	esi, 90*65536+320 ; size: 90*320
   377                                  	;;mov	ebx, 0133h ; sub color, window, masked
   378                                  	;mov	bl, 33h
   379                                  	sys	_video	
   379                              <1> 
   379                              <1> 
   379                              <1> 
   379                              <1> 
   379                              <1>  %if %0 >= 2
   379                              <1>  mov ebx, %2
   379                              <1>  %if %0 >= 3
   379                              <1>  mov ecx, %3
   379                              <1>  %if %0 = 4
   379                              <1>  mov edx, %4
   379                              <1>  %endif
   379                              <1>  %endif
   379                              <1>  %endif
   379 000002CF B81F000000          <1>  mov eax, %1
   379                              <1> 
   379 000002D4 CD40                <1>  int 40h
   380                                  
   381 000002D6 E8A7000000              	call	waitforkey
   382                                  
   383                                  	; Masked ADD to blue block position
   384                                  	;sub	edi, edi ; mask color, BLACK
   385                                  	;mov	cl, 8 ; add 8 from current color
   386 000002DB BA00000A00              	mov	edx, 10*65536 ; column 0, row 10
   387                                  	;mov	esi, 90*65536+320 ; size: 90*320
   388                                  	;mov	ebx, 0132h ; add color, window, masked
   389 000002E0 B332                    	mov	bl, 32h
   390                                  	sys	_video	
   390                              <1> 
   390                              <1> 
   390                              <1> 
   390                              <1> 
   390                              <1>  %if %0 >= 2
   390                              <1>  mov ebx, %2
   390                              <1>  %if %0 >= 3
   390                              <1>  mov ecx, %3
   390                              <1>  %if %0 = 4
   390                              <1>  mov edx, %4
   390                              <1>  %endif
   390                              <1>  %endif
   390                              <1>  %endif
   390 000002E2 B81F000000          <1>  mov eax, %1
   390                              <1> 
   390 000002E7 CD40                <1>  int 40h
   391                                  
   392 000002E9 E894000000              	call	waitforkey
   393                                  
   394                                  	; Masked OR colors, window
   395                                  	; (white block starts at row 5)
   396 000002EE BF20000000              	mov	edi, 20h ; mask color, BLUE
   397 000002F3 B128                    	mov	cl, 28h ; OR value (with current color)
   398 000002F5 BA00000500              	mov	edx, 5*65536+0 ; column 0, row 5
   399 000002FA BE40016400              	mov	esi, 100*65536+320 ; size: 100*320
   400                                  	;mov	ebx, 0134h ; Masked OR colors in window
   401 000002FF B334                    	mov	bl, 34h
   402                                  	sys	_video
   402                              <1> 
   402                              <1> 
   402                              <1> 
   402                              <1> 
   402                              <1>  %if %0 >= 2
   402                              <1>  mov ebx, %2
   402                              <1>  %if %0 >= 3
   402                              <1>  mov ecx, %3
   402                              <1>  %if %0 = 4
   402                              <1>  mov edx, %4
   402                              <1>  %endif
   402                              <1>  %endif
   402                              <1>  %endif
   402 00000301 B81F000000          <1>  mov eax, %1
   402                              <1> 
   402 00000306 CD40                <1>  int 40h
   403                                  
   404 00000308 E875000000              	call	waitforkey
   405                                  
   406                                  	; Masked XOR colors, window
   407                                  	; (white block starts at row 100)
   408 0000030D BF28000000              	mov	edi, 28h ; mask color, RED
   409 00000312 B12C                    	mov	cl, 2Ch ; XOR value (with current color)
   410 00000314 BA00006400              	mov	edx, 100*65536+0 ; column 0, row 100
   411                                  	;mov	esi, 100*65536+320 ; size: 100*320
   412                                  	;mov	ebx, 0236h ; Masked XOR colors in window
   413 00000319 B336                    	mov	bl, 36h
   414                                  	sys	_video
   414                              <1> 
   414                              <1> 
   414                              <1> 
   414                              <1> 
   414                              <1>  %if %0 >= 2
   414                              <1>  mov ebx, %2
   414                              <1>  %if %0 >= 3
   414                              <1>  mov ecx, %3
   414                              <1>  %if %0 = 4
   414                              <1>  mov edx, %4
   414                              <1>  %endif
   414                              <1>  %endif
   414                              <1>  %endif
   414 0000031B B81F000000          <1>  mov eax, %1
   414                              <1> 
   414 00000320 CD40                <1>  int 40h
   415                                  
   416 00000322 E85B000000              	call	waitforkey
   417                                  
   418                                  	; Masked mix color, window
   419                                  	; (blue block starts at row 10)
   420 00000327 BF20000000              	mov	edi, 20h ; mask color, BLUE
   421 0000032C B130                    	mov	cl, 30h ; average color will be 2Ch
   422 0000032E BA28000A00              	mov	edx, 10*65536+40 ; column 40, row 10
   423 00000333 BEA0005A00              	mov	esi, 90*65536+160 ; size: 90*160
   424                                  	;mov	ebx, 013Bh ; Masked mix colors in window
   425 00000338 B33B                    	mov	bl, 3Bh
   426                                  	sys	_video
   426                              <1> 
   426                              <1> 
   426                              <1> 
   426                              <1> 
   426                              <1>  %if %0 >= 2
   426                              <1>  mov ebx, %2
   426                              <1>  %if %0 >= 3
   426                              <1>  mov ecx, %3
   426                              <1>  %if %0 = 4
   426                              <1>  mov edx, %4
   426                              <1>  %endif
   426                              <1>  %endif
   426                              <1>  %endif
   426 0000033A B81F000000          <1>  mov eax, %1
   426                              <1> 
   426 0000033F CD40                <1>  int 40h
   427                                  
   428 00000341 E83C000000              	call	waitforkey
   429                                  
   430                                  	; Masked mix color, window
   431                                  	; (red block starts at row 100)
   432 00000346 BF28000000              	mov	edi, 28h ; mask color, RED
   433 0000034B B11E                    	mov	cl, 1Eh ; average color will be 0Fh
   434 0000034D BA28006400              	mov	edx, 100*65536+40 ; column 40, row 100
   435                                  	;mov	esi, 90*65536+160 ; size: 90*160
   436                                  	;;mov	ebx, 013Bh ; Masked mix colors in window
   437                                  	;mov	bl, 3Bh
   438                                  	sys	_video
   438                              <1> 
   438                              <1> 
   438                              <1> 
   438                              <1> 
   438                              <1>  %if %0 >= 2
   438                              <1>  mov ebx, %2
   438                              <1>  %if %0 >= 3
   438                              <1>  mov ecx, %3
   438                              <1>  %if %0 = 4
   438                              <1>  mov edx, %4
   438                              <1>  %endif
   438                              <1>  %endif
   438                              <1>  %endif
   438 00000352 B81F000000          <1>  mov eax, %1
   438                              <1> 
   438 00000357 CD40                <1>  int 40h
   439                                  
   440 00000359 E824000000              	call	waitforkey
   441                                  
   442                                  	; copy full screen buffer to screen
   443 0000035E BE[A8040000]            	mov	esi, fullscreen_buffer
   444 00000363 BB00010000              	mov	ebx, 0100h
   445                                  	sys	_video
   445                              <1> 
   445                              <1> 
   445                              <1> 
   445                              <1> 
   445                              <1>  %if %0 >= 2
   445                              <1>  mov ebx, %2
   445                              <1>  %if %0 >= 3
   445                              <1>  mov ecx, %3
   445                              <1>  %if %0 = 4
   445                              <1>  mov edx, %4
   445                              <1>  %endif
   445                              <1>  %endif
   445                              <1>  %endif
   445 00000368 B81F000000          <1>  mov eax, %1
   445                              <1> 
   445 0000036D CD40                <1>  int 40h
   446                                  	
   447 0000036F E80E000000              	call	waitforkey  
   448                                  		; wait for key stroke before exit
   449                                  terminate:
   450 00000374 E82C000000              	call	set_text_mode
   451                                  	sys	_exit
   451                              <1> 
   451                              <1> 
   451                              <1> 
   451                              <1> 
   451                              <1>  %if %0 >= 2
   451                              <1>  mov ebx, %2
   451                              <1>  %if %0 >= 3
   451                              <1>  mov ecx, %3
   451                              <1>  %if %0 = 4
   451                              <1>  mov edx, %4
   451                              <1>  %endif
   451                              <1>  %endif
   451                              <1>  %endif
   451 00000379 B801000000          <1>  mov eax, %1
   451                              <1> 
   451 0000037E CD40                <1>  int 40h
   452                                  halt:
   453 00000380 EBFE                    	jmp	short halt
   454                                  
   455                                  waitforkey:
   456 00000382 B401                    	mov	ah, 1
   457 00000384 CD32                    	int	32h
   458 00000386 740B                    	jz	short getkey
   459 00000388 FF05[A0040000]          	inc	dword [counter]
   460 0000038E 90                      	nop
   461 0000038F 90                      	nop
   462 00000390 90                      	nop
   463 00000391 EBEF                    	jmp	short waitforkey
   464                                  getkey:
   465 00000393 30E4                    	xor	ah, ah
   466 00000395 CD32                    	int	32h
   467                                  
   468 00000397 663D032E                	cmp	ax, 2E03h
   469 0000039B 7405                    	je	short _terminate
   470 0000039D 3C1B                    	cmp	al, 1Bh ; ESC key
   471 0000039F 7401                    	je	short _terminate
   472 000003A1 C3                      	retn
   473                                  _terminate:
   474 000003A2 58                      	pop	eax ; return address
   475 000003A3 EBCF                    	jmp	short terminate
   476                                  	
   477                                  set_text_mode:
   478 000003A5 30E4                    	xor    ah, ah
   479 000003A7 B003                    	mov    al, 3                        
   480                                   	;int   10h ; al = 03h text mode, int 10 video
   481 000003A9 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   482 000003AB C3                      	retn
   483                                  
   484                                  print_msg:
   485 000003AC B40E                    	mov	ah, 0Eh
   486 000003AE BB07000000              	mov	ebx, 7
   487                                  	;mov	bl, 7 ; char attribute & color
   488                                  p_next_chr:
   489 000003B3 AC                      	lodsb
   490 000003B4 08C0                    	or	al, al
   491 000003B6 7404                    	jz	short p_retn ; retn	
   492 000003B8 CD31                    	int	31h
   493 000003BA EBF7                    	jmp	short p_next_chr
   494                                  p_retn:
   495 000003BC C3                      	retn
   496                                  
   497                                  print_text:
   498                                  	; ebp = text address
   499                                  	; esi = row/column position (si = column)
   500                                  p_d_x:
   501                                  	;mov	dh, 0 ; 8x16 system font
   502 000003BD B606                    	mov	dh, 6 ; 32*64 scaled font (base: 8*16 system font) 
   503                                  p_d_x_n:
   504 000003BF 8A5500                  	mov	dl, [ebp]
   505 000003C2 20D2                    	and	dl, dl
   506 000003C4 7419                    	jz	short p_d_x_ok
   507                                  	sys	_video, 010Fh, [tcolor] 
   507                              <1> 
   507                              <1> 
   507                              <1> 
   507                              <1> 
   507                              <1>  %if %0 >= 2
   507 000003C6 BB0F010000          <1>  mov ebx, %2
   507                              <1>  %if %0 >= 3
   507 000003CB 8B0D[A4040000]      <1>  mov ecx, %3
   507                              <1>  %if %0 = 4
   507                              <1>  mov edx, %4
   507                              <1>  %endif
   507                              <1>  %endif
   507                              <1>  %endif
   507 000003D1 B81F000000          <1>  mov eax, %1
   507                              <1> 
   507 000003D6 CD40                <1>  int 40h
   508 000003D8 45                      	inc	ebp
   509 000003D9 6683C624                	add	si, 36 ; next char pos
   510 000003DD EBE0                    	jmp	short p_d_x_n
   511                                  p_d_x_ok:
   512 000003DF C3                      	retn
   513                                  
   514                                  program_msg:
   515 000003E0 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations"
   515 000003E9 2076322E302E33202D-
   515 000003F2 202827737973766964-
   515 000003FB 656F27292054657374-
   515 00000404 2050726F6772616D20-
   515 0000040D 2D20426C6F636B204F-
   515 00000416 7065726174696F6E73 
   516 0000041F 0D0A                    	db 0Dh, 0Ah
   517 00000421 6279204572646F6761-     	db "by Erdogan Tan - 27/02/2021"
   517 0000042A 6E2054616E202D2032-
   517 00000433 372F30322F32303231 
   518                                  	;db 0Dh, 0Ah, 0
   519 0000043C 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   520 00000440 507265737320616E79-     	db "Press any key to continue .."
   520 00000449 206B657920746F2063-
   520 00000452 6F6E74696E7565202E-
   520 0000045B 2E                 
   521 0000045C 0D0A                    	db 0Dh, 0Ah	
   522 0000045E 285072657373204553-     	db "(Press ESC to exit) .."
   522 00000467 4320746F2065786974-
   522 00000470 29202E2E           
   523 00000474 0D0A                    	db 0Dh, 0Ah
   524 00000476 0D0A                    	db 0Dh, 0Ah
   525                                  
   526                                  nextline:
   527 00000478 0D0A00                  	db 0Dh, 0Ah, 0
   528                                  
   529                                  txt_blue:
   530 0000047B 424C554500              	db "BLUE", 0
   531                                  txt_red:
   532 00000480 52454400                	db "RED", 0
   533                                  txt_green:
   534 00000484 475245454E00            	db "GREEN", 0
   535                                  txt_yellow:
   536 0000048A 59454C4C4F5700          	db "YELLOW", 0
   537                                  txt_white:
   538 00000491 574849544500            	db "WHITE", 0
   539                                  txt_black:
   540 00000497 424C41434B00            	db "BLACK", 0
   541                                  	
   542                                  bss:
   543                                  
   544                                  ABSOLUTE bss
   545                                  
   546 0000049D <res 00000003>          alignb 4
   547                                  
   548                                  counter:
   549 000004A0 <res 00000004>          	resd 1	
   550                                  
   551                                  bss_start:
   552 000004A4 <res 00000004>          tcolor: resd 1
   553                                  
   554                                  fullscreen_buffer:
   555 000004A8 <res 0000FA00>          	resb 64000
   556                                  bss_end:
