     1                                  ; ****************************************************************************
     2                                  ; blocks17.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 02/03/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm blocks17.s -l blocks17.txt -o BLOCKS17.PRG -Z error.txt
     9                                  ; (modified from 'blocks16.s', 02/03/2021 & 'blocks14.s', 01/03/2021)
    10                                  
    11                                  ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 111h)
    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[98050000]            	mov	edi, bss_start
    93 00000005 B901580200              	mov	ecx, (bss_end - bss_start)/4
    94                                  	;xor	eax, eax
    95 0000000A F3AB                    	rep	stosd
    96                                  
    97                                  	; program message
    98 0000000C BE[D7040000]            	mov	esi, program_msg
    99 00000011 E88D040000              	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 111h ; 640x480, 16 bit high colors
   107                                  	;			 ; (RGB: 5:6:5)
   108                                  	sys	_video, 08FFh, 111h
   108                              <1> 
   108                              <1> 
   108                              <1> 
   108                              <1> 
   108                              <1>  %if %0 >= 2
   108 0000001A BBFF080000          <1>  mov ebx, %2
   108                              <1>  %if %0 >= 3
   108 0000001F B911010000          <1>  mov ecx, %3
   108                              <1>  %if %0 = 4
   108                              <1>  mov edx, %4
   108                              <1>  %endif
   108                              <1>  %endif
   108                              <1>  %endif
   108 00000024 B81F000000          <1>  mov eax, %1
   108                              <1> 
   108 00000029 CD40                <1>  int 40h
   109 0000002B 09C0                    	or	eax, eax
   110                                  	;jz	short terminate
   111                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   112 0000002D 7505                    	jnz	short set_vesa_mode_111h_ok
   113 0000002F E937040000              	jmp	terminate
   114                                  
   115                                  set_vesa_mode_111h_ok:
   116 00000034 B9FFFF0000              	mov	ecx, 0FFFFh ; WHITE
   117 00000039 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   118                                  	sys	_video
   118                              <1> 
   118                              <1> 
   118                              <1> 
   118                              <1> 
   118                              <1>  %if %0 >= 2
   118                              <1>  mov ebx, %2
   118                              <1>  %if %0 >= 3
   118                              <1>  mov ecx, %3
   118                              <1>  %if %0 = 4
   118                              <1>  mov edx, %4
   118                              <1>  %endif
   118                              <1>  %endif
   118                              <1>  %endif
   118 0000003E B81F000000          <1>  mov eax, %1
   118                              <1> 
   118 00000043 CD40                <1>  int 40h
   119                                  
   120                                  	;mov	dword [tcolor], 0
   121 00000045 BEF000D000              	mov	esi, 208*65536+240
   122 0000004A BD[88050000]            	mov	ebp, txt_white
   123 0000004F E860040000               	call	print_text
   124                                  
   125 00000054 E820040000              	call	waitforkey
   126                                  
   127                                  	; full screen replace color (replace black colors)
   128 00000059 29C9                    	sub	ecx, ecx ; 0 ; BLACK
   129 0000005B BAE0FB0000              	mov	edx, 1111101111100000b ; ORANGE
   130 00000060 B30C                    	mov	bl, 0Ch
   131                                  	sys	_video
   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 00000062 B81F000000          <1>  mov eax, %1
   131                              <1> 
   131 00000067 CD40                <1>  int 40h
   132                                  	
   133 00000069 E80B040000              	call	waitforkey
   134                                  
   135                                  	; Mask color = black
   136                                  	; full screen NOT (except mask color)
   137 0000006E BFE0FB0000              	mov	edi, 1111101111100000b ; ORANGE
   138 00000073 BB27020000              	mov	ebx, 0227h ; masked 'NOT', full screen
   139                                  	sys	_video
   139                              <1> 
   139                              <1> 
   139                              <1> 
   139                              <1> 
   139                              <1>  %if %0 >= 2
   139                              <1>  mov ebx, %2
   139                              <1>  %if %0 >= 3
   139                              <1>  mov ecx, %3
   139                              <1>  %if %0 = 4
   139                              <1>  mov edx, %4
   139                              <1>  %endif
   139                              <1>  %endif
   139                              <1>  %endif
   139 00000078 B81F000000          <1>  mov eax, %1
   139                              <1> 
   139 0000007D CD40                <1>  int 40h
   140                                  	
   141 0000007F E8F5030000              	call	waitforkey
   142                                  
   143                                  	; full screen replace color (replace black colors)
   144 00000084 B9E0FB0000              	mov	ecx, 1111101111100000b ; ORANGE
   145 00000089 BAFFFF0000              	mov	edx, 0FFFFh ; WHITE
   146 0000008E B30C                    	mov	bl, 0Ch
   147                                  	sys	_video
   147                              <1> 
   147                              <1> 
   147                              <1> 
   147                              <1> 
   147                              <1>  %if %0 >= 2
   147                              <1>  mov ebx, %2
   147                              <1>  %if %0 >= 3
   147                              <1>  mov ecx, %3
   147                              <1>  %if %0 = 4
   147                              <1>  mov edx, %4
   147                              <1>  %endif
   147                              <1>  %endif
   147                              <1>  %endif
   147 00000090 B81F000000          <1>  mov eax, %1
   147                              <1> 
   147 00000095 CD40                <1>  int 40h
   148                                  	
   149 00000097 E8DD030000              	call	waitforkey
   150                                  
   151                                  	; full screen - blue color 
   152                                  
   153 0000009C B91F000000              	mov	ecx, 11111b ; BLUE
   154 000000A1 B301                    	mov	bl, 01h ; Full screen, new color
   155                                  	sys	_video
   155                              <1> 
   155                              <1> 
   155                              <1> 
   155                              <1> 
   155                              <1>  %if %0 >= 2
   155                              <1>  mov ebx, %2
   155                              <1>  %if %0 >= 3
   155                              <1>  mov ecx, %3
   155                              <1>  %if %0 = 4
   155                              <1>  mov edx, %4
   155                              <1>  %endif
   155                              <1>  %endif
   155                              <1>  %endif
   155 000000A3 B81F000000          <1>  mov eax, %1
   155                              <1> 
   155 000000A8 CD40                <1>  int 40h
   156                                  
   157 000000AA C705[98050000]FFFF-     	mov	dword [tcolor], 0FFFFh
   157 000000B2 0000               
   158 000000B4 BE0201D000              	mov	esi, 208*65536+258
   159 000000B9 BD[72050000]            	mov	ebp, txt_blue
   160 000000BE E8F1030000               	call	print_text
   161                                  
   162 000000C3 E8B1030000              	call	waitforkey
   163                                  
   164                                  	; Mask color = white
   165                                  	; full screen NOT (except mask color)
   166 000000C8 BFFFFF0000              	mov	edi, 0FFFFh
   167 000000CD B327                    	mov	bl, 27h ; masked 'NOT', full screen
   168                                  	sys	_video
   168                              <1> 
   168                              <1> 
   168                              <1> 
   168                              <1> 
   168                              <1>  %if %0 >= 2
   168                              <1>  mov ebx, %2
   168                              <1>  %if %0 >= 3
   168                              <1>  mov ecx, %3
   168                              <1>  %if %0 = 4
   168                              <1>  mov edx, %4
   168                              <1>  %endif
   168                              <1>  %endif
   168                              <1>  %endif
   168 000000CF B81F000000          <1>  mov eax, %1
   168                              <1> 
   168 000000D4 CD40                <1>  int 40h
   169                                  
   170 000000D6 E89E030000              	call	waitforkey
   171                                  	
   172 000000DB B900F80000              	mov	ecx, 1111100000000000b ; RED
   173 000000E0 B301                    	mov	bl, 01h ; Full screen, new color
   174                                  	sys	_video
   174                              <1> 
   174                              <1> 
   174                              <1> 
   174                              <1> 
   174                              <1>  %if %0 >= 2
   174                              <1>  mov ebx, %2
   174                              <1>  %if %0 >= 3
   174                              <1>  mov ecx, %3
   174                              <1>  %if %0 = 4
   174                              <1>  mov edx, %4
   174                              <1>  %endif
   174                              <1>  %endif
   174                              <1>  %endif
   174 000000E2 B81F000000          <1>  mov eax, %1
   174                              <1> 
   174 000000E7 CD40                <1>  int 40h
   175                                  
   176                                  	;mov	word [tcolor], 0FFFFh
   177 000000E9 BE1401D000              	mov	esi, 208*65536+276
   178 000000EE BD[77050000]            	mov	ebp, txt_red
   179 000000F3 E8BC030000               	call	print_text
   180                                  
   181 000000F8 E87C030000              	call	waitforkey
   182                                  
   183                                  	; Mask color = red
   184                                  	; full screen NEW COLOR (except mask color)
   185 000000FD BF00F80000              	mov	edi, 1111100000000000b ; mask color, RED
   186 00000102 B9E0FF0000              	mov	ecx, 1111111111100000b ; YELLOW
   187 00000107 B321                    	mov	bl, 21h ; masked new color, full screen
   188                                  	sys	_video
   188                              <1> 
   188                              <1> 
   188                              <1> 
   188                              <1> 
   188                              <1>  %if %0 >= 2
   188                              <1>  mov ebx, %2
   188                              <1>  %if %0 >= 3
   188                              <1>  mov ecx, %3
   188                              <1>  %if %0 = 4
   188                              <1>  mov edx, %4
   188                              <1>  %endif
   188                              <1>  %endif
   188                              <1>  %endif
   188 00000109 B81F000000          <1>  mov eax, %1
   188                              <1> 
   188 0000010E CD40                <1>  int 40h
   189                                  
   190 00000110 E864030000              	call	waitforkey
   191                                  	
   192                                  	; full screen replace color (replace yellow colors)
   193 00000115 B9E0FF0000              	mov	ecx, 1111111111100000b ; YELLOW
   194 0000011A BAE0FB0000              	mov	edx, 1111101111100000b ; new color, ORANGE
   195 0000011F B30C                    	mov	bl, 0Ch
   196                                  	sys	_video
   196                              <1> 
   196                              <1> 
   196                              <1> 
   196                              <1> 
   196                              <1>  %if %0 >= 2
   196                              <1>  mov ebx, %2
   196                              <1>  %if %0 >= 3
   196                              <1>  mov ecx, %3
   196                              <1>  %if %0 = 4
   196                              <1>  mov edx, %4
   196                              <1>  %endif
   196                              <1>  %endif
   196                              <1>  %endif
   196 00000121 B81F000000          <1>  mov eax, %1
   196                              <1> 
   196 00000126 CD40                <1>  int 40h
   197                                  
   198 00000128 E84C030000              	call	waitforkey
   199                                  
   200                                  	; full screen - green color
   201                                  
   202 0000012D B9E0070000              	mov	ecx, 11111100000b ; GREEN
   203 00000132 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   204                                  	sys	_video
   204                              <1> 
   204                              <1> 
   204                              <1> 
   204                              <1> 
   204                              <1>  %if %0 >= 2
   204                              <1>  mov ebx, %2
   204                              <1>  %if %0 >= 3
   204                              <1>  mov ecx, %3
   204                              <1>  %if %0 = 4
   204                              <1>  mov edx, %4
   204                              <1>  %endif
   204                              <1>  %endif
   204                              <1>  %endif
   204 00000137 B81F000000          <1>  mov eax, %1
   204                              <1> 
   204 0000013C CD40                <1>  int 40h
   205                                  
   206 0000013E C705[98050000]0000-     	mov	dword [tcolor], 0
   206 00000146 0000               
   207 00000148 BEF000D000              	mov	esi, 208*65536+240
   208 0000014D BD[7B050000]            	mov	ebp, txt_green
   209 00000152 E85D030000               	call	print_text
   210                                  
   211 00000157 E81D030000              	call	waitforkey
   212                                  
   213                                  	; Masked new color
   214 0000015C BFE0070000              	mov	edi, 11111100000b ; mask color, GREEN
   215 00000161 B9FFFF0000              	mov	ecx, 0FFFFh ; WHITE
   216 00000166 B321                    	mov	bl, 21h ; masked new color, full screen
   217                                  	sys	_video
   217                              <1> 
   217                              <1> 
   217                              <1> 
   217                              <1> 
   217                              <1>  %if %0 >= 2
   217                              <1>  mov ebx, %2
   217                              <1>  %if %0 >= 3
   217                              <1>  mov ecx, %3
   217                              <1>  %if %0 = 4
   217                              <1>  mov edx, %4
   217                              <1>  %endif
   217                              <1>  %endif
   217                              <1>  %endif
   217 00000168 B81F000000          <1>  mov eax, %1
   217                              <1> 
   217 0000016D CD40                <1>  int 40h
   218                                  
   219 0000016F E805030000              	call	waitforkey
   220                                  	
   221                                  	; Masked mix colors
   222 00000174 BFFFFF0000              	mov	edi, 0FFFFh ; WHITE
   223 00000179 B9FF000000              	mov	ecx, 0FFh 
   224 0000017E B32B                    	mov	bl, 2Bh  ; masked MIX colors, full screen
   225                                  	sys	_video
   225                              <1> 
   225                              <1> 
   225                              <1> 
   225                              <1> 
   225                              <1>  %if %0 >= 2
   225                              <1>  mov ebx, %2
   225                              <1>  %if %0 >= 3
   225                              <1>  mov ecx, %3
   225                              <1>  %if %0 = 4
   225                              <1>  mov edx, %4
   225                              <1>  %endif
   225                              <1>  %endif
   225                              <1>  %endif
   225 00000180 B81F000000          <1>  mov eax, %1
   225                              <1> 
   225 00000185 CD40                <1>  int 40h
   226                                  
   227 00000187 E8ED020000              	call	waitforkey
   228                                  
   229                                  	; full screen - yellow color
   230                                  
   231 0000018C B9E0FF0000              	mov	ecx, 1111111111100000b ; YELLOW
   232 00000191 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   233                                  	sys	_video
   233                              <1> 
   233                              <1> 
   233                              <1> 
   233                              <1> 
   233                              <1>  %if %0 >= 2
   233                              <1>  mov ebx, %2
   233                              <1>  %if %0 >= 3
   233                              <1>  mov ecx, %3
   233                              <1>  %if %0 = 4
   233                              <1>  mov edx, %4
   233                              <1>  %endif
   233                              <1>  %endif
   233                              <1>  %endif
   233 00000196 B81F000000          <1>  mov eax, %1
   233                              <1> 
   233 0000019B CD40                <1>  int 40h
   234                                  
   235                                  	;mov	dword [tcolor], 0
   236 0000019D BEDE00D000              	mov	esi, 208*65536+222
   237 000001A2 BD[81050000]            	mov	ebp, txt_yellow
   238 000001A7 E808030000               	call	print_text
   239                                  
   240 000001AC E8C8020000              	call	waitforkey
   241                                  
   242                                  	; masked add color
   243 000001B1 31FF                    	xor	edi, edi ; mask color is BLACK 
   244 000001B3 B980000000              	mov	ecx, 80h ; add 80h to current color
   245 000001B8 B322                    	mov	bl, 22h
   246                                  	sys	_video
   246                              <1> 
   246                              <1> 
   246                              <1> 
   246                              <1> 
   246                              <1>  %if %0 >= 2
   246                              <1>  mov ebx, %2
   246                              <1>  %if %0 >= 3
   246                              <1>  mov ecx, %3
   246                              <1>  %if %0 = 4
   246                              <1>  mov edx, %4
   246                              <1>  %endif
   246                              <1>  %endif
   246                              <1>  %endif
   246 000001BA B81F000000          <1>  mov eax, %1
   246                              <1> 
   246 000001BF CD40                <1>  int 40h
   247                                  
   248 000001C1 E8B3020000              	call	waitforkey
   249                                  
   250                                  	; masked sub color
   251                                  	;xor	edi, edi ; mask color is BLACK 
   252                                  	;mov	ecx, 80h ; sub 80h from current color
   253 000001C6 B323                    	mov	bl, 23h
   254                                  	sys	_video
   254                              <1> 
   254                              <1> 
   254                              <1> 
   254                              <1> 
   254                              <1>  %if %0 >= 2
   254                              <1>  mov ebx, %2
   254                              <1>  %if %0 >= 3
   254                              <1>  mov ecx, %3
   254                              <1>  %if %0 = 4
   254                              <1>  mov edx, %4
   254                              <1>  %endif
   254                              <1>  %endif
   254                              <1>  %endif
   254 000001C8 B81F000000          <1>  mov eax, %1
   254                              <1> 
   254 000001CD CD40                <1>  int 40h
   255                                  
   256 000001CF E8A5020000              	call	waitforkey
   257                                  
   258                                  	; masked AND colors
   259                                  	;xor	edi, edi ; mask color is BLACK
   260 000001D4 B93F300000              	mov	ecx, 303Fh ; and 30h with current color
   261 000001D9 B325                    	mov	bl, 25h
   262                                  	sys	_video
   262                              <1> 
   262                              <1> 
   262                              <1> 
   262                              <1> 
   262                              <1>  %if %0 >= 2
   262                              <1>  mov ebx, %2
   262                              <1>  %if %0 >= 3
   262                              <1>  mov ecx, %3
   262                              <1>  %if %0 = 4
   262                              <1>  mov edx, %4
   262                              <1>  %endif
   262                              <1>  %endif
   262                              <1>  %endif
   262 000001DB B81F000000          <1>  mov eax, %1
   262                              <1> 
   262 000001E0 CD40                <1>  int 40h
   263                                  	
   264 000001E2 E892020000              	call	waitforkey
   265                                  
   266                                  	; masked OR colors
   267 000001E7 BFE0FF0000              	mov	edi, 1111111111100000b ; mask color is Yellow
   268 000001EC B947200000              	mov	ecx, 2047h ; or 40h with current color
   269 000001F1 B324                    	mov	bl, 24h
   270                                  	sys	_video
   270                              <1> 
   270                              <1> 
   270                              <1> 
   270                              <1> 
   270                              <1>  %if %0 >= 2
   270                              <1>  mov ebx, %2
   270                              <1>  %if %0 >= 3
   270                              <1>  mov ecx, %3
   270                              <1>  %if %0 = 4
   270                              <1>  mov edx, %4
   270                              <1>  %endif
   270                              <1>  %endif
   270                              <1>  %endif
   270 000001F3 B81F000000          <1>  mov eax, %1
   270                              <1> 
   270 000001F8 CD40                <1>  int 40h
   271                                  	
   272 000001FA E87A020000              	call	waitforkey
   273                                  
   274                                  	; masked XOR colors
   275                                  	;mov	edi, 1111111111100000b ; mask color is Yellow
   276 000001FF B92F2F0000              	mov	ecx, 2F2Fh ; xor 2Fh with current color
   277 00000204 B326                    	mov	bl, 26h
   278                                  	sys	_video
   278                              <1> 
   278                              <1> 
   278                              <1> 
   278                              <1> 
   278                              <1>  %if %0 >= 2
   278                              <1>  mov ebx, %2
   278                              <1>  %if %0 >= 3
   278                              <1>  mov ecx, %3
   278                              <1>  %if %0 = 4
   278                              <1>  mov edx, %4
   278                              <1>  %endif
   278                              <1>  %endif
   278                              <1>  %endif
   278 00000206 B81F000000          <1>  mov eax, %1
   278                              <1> 
   278 0000020B CD40                <1>  int 40h
   279                                  
   280 0000020D E867020000              	call	waitforkey
   281                                  
   282                                  	; Full screen copy
   283 00000212 BE[9C050000]            	mov	esi, fullscreen_buffer
   284 00000217 89F7                    	mov	edi, esi
   285                                  
   286                                  	; Black
   287 00000219 B900190000              	mov	ecx, 640*10
   288 0000021E 31C0                    	xor	eax, eax ; black
   289 00000220 F366AB                  	rep	stosw
   290                                  
   291                                  	; White
   292 00000223 B9800C0000              	mov	ecx, 640*5
   293 00000228 66B8FFFF                	mov	ax, 0FFFFh ; white
   294 0000022C F366AB                  	rep	stosw
   295                                  
   296                                  	; Black
   297 0000022F B9800C0000              	mov	ecx, 640*5
   298 00000234 31C0                    	xor	eax, eax ; black
   299 00000236 F366AB                  	rep	stosw
   300                                  
   301                                  	; Blue
   302 00000239 B900130100              	mov	ecx, 640*110
   303 0000023E B01F                    	mov	al, 11111b
   304 00000240 F366AB                  	rep	stosw
   305                                  
   306                                  	; Red
   307 00000243 B900130100              	mov	ecx, 640*110
   308 00000248 B800F80000              	mov	eax, 1111100000000000b
   309 0000024D F366AB                  	rep	stosw
   310                                  
   311                                  	; Green
   312 00000250 B900130100              	mov	ecx, 640*110
   313 00000255 B8E0070000              	mov	eax, 11111100000b
   314 0000025A F366AB                  	rep	stosw
   315                                  
   316                                  	; Yellow
   317 0000025D B900130100              	mov	ecx, 640*110
   318 00000262 B8E0FF0000              	mov	eax, 1111111111100000b
   319 00000267 F366AB                  	rep	stosw
   320                                  
   321                                  	; Black
   322 0000026A B9800C0000              	mov	ecx, 640*5
   323 0000026F 31C0                    	xor	eax, eax ; black
   324 00000271 F366AB                  	rep	stosw
   325                                  
   326                                  	; White
   327 00000274 B9800C0000              	mov	ecx, 640*5
   328 00000279 66B8FFFF                	mov	ax, 0FFFFh ; white
   329 0000027D F366AB                  	rep	stosw
   330                                  
   331                                  	; Black
   332 00000280 B900190000              	mov	ecx, 640*10
   333 00000285 31C0                    	xor	eax, eax ; black
   334 00000287 F366AB                  	rep	stosw
   335                                  
   336 0000028A BB00020000              	mov	ebx, 0200h ; Full screen copy
   337                                  	sys	_video
   337                              <1> 
   337                              <1> 
   337                              <1> 
   337                              <1> 
   337                              <1>  %if %0 >= 2
   337                              <1>  mov ebx, %2
   337                              <1>  %if %0 >= 3
   337                              <1>  mov ecx, %3
   337                              <1>  %if %0 = 4
   337                              <1>  mov edx, %4
   337                              <1>  %endif
   337                              <1>  %endif
   337                              <1>  %endif
   337 0000028F B81F000000          <1>  mov eax, %1
   337                              <1> 
   337 00000294 CD40                <1>  int 40h
   338                                  
   339 00000296 E8DE010000              	call	waitforkey
   340                                  
   341 0000029B 66C705[98050000]FF-     	mov	word [tcolor], 0FFFFh
   341 000002A3 FF                 
   342                                  
   343 000002A4 BE2B002B00              	mov	esi, 43*65536+43
   344 000002A9 BD[72050000]            	mov	ebp, txt_blue
   345 000002AE E801020000               	call	print_text
   346                                  	
   347 000002B3 E8C1010000              	call	waitforkey
   348                                  
   349 000002B8 BE2B009900              	mov	esi, 153*65536+43
   350 000002BD BD[77050000]            	mov	ebp, txt_red
   351 000002C2 E8ED010000               	call	print_text
   352                                  	
   353 000002C7 E8AD010000              	call	waitforkey
   354                                  
   355 000002CC BE2B000701              	mov	esi, 263*65536+43
   356 000002D1 BD[7B050000]            	mov	ebp, txt_green
   357 000002D6 E8D9010000               	call	print_text
   358                                  	
   359 000002DB E899010000              	call	waitforkey
   360                                  
   361 000002E0 BE2B007501              	mov	esi, 373*65536+43
   362 000002E5 BD[81050000]            	mov	ebp, txt_yellow
   363 000002EA E8C5010000               	call	print_text
   364                                  	
   365 000002EF E885010000              	call	waitforkey
   366                                  
   367 000002F4 C705[98050000]0000-     	mov	dword [tcolor], 0
   367 000002FC 0000               
   368                                  
   369 000002FE BE2B000701              	mov	esi, 263*65536+43
   370 00000303 BD[7B050000]            	mov	ebp, txt_green
   371 00000308 E8A7010000               	call	print_text
   372                                  	
   373 0000030D E867010000              	call	waitforkey
   374                                  
   375 00000312 BE2B007501              	mov	esi, 373*65536+43
   376 00000317 BD[81050000]            	mov	ebp, txt_yellow
   377 0000031C E893010000               	call	print_text
   378                                  	
   379 00000321 E853010000              	call	waitforkey
   380                                  
   381                                  	; Masked new color, window
   382                                  	; (blue block starts at row 20)
   383                                  	; ((white text color will be changed to black))
   384 00000326 BF1F000000              	mov	edi, 11111b ; mask color, BLUE
   385 0000032B 31C9                    	xor	ecx, ecx ; 0 ; BLACK (new color)
   386 0000032D BA28001400              	mov	edx, 20*65536+40 ; column 40, row 20
   387 00000332 BEA0006E00              	mov	esi, 110*65536+160 ; size: 110*160
   388 00000337 BB31020000              	mov	ebx, 0231h ; Masked new color in window
   389                                  	sys	_video
   389                              <1> 
   389                              <1> 
   389                              <1> 
   389                              <1> 
   389                              <1>  %if %0 >= 2
   389                              <1>  mov ebx, %2
   389                              <1>  %if %0 >= 3
   389                              <1>  mov ecx, %3
   389                              <1>  %if %0 = 4
   389                              <1>  mov edx, %4
   389                              <1>  %endif
   389                              <1>  %endif
   389                              <1>  %endif
   389 0000033C B81F000000          <1>  mov eax, %1
   389                              <1> 
   389 00000341 CD40                <1>  int 40h
   390                                  
   391 00000343 E831010000              	call	waitforkey
   392                                  
   393                                  	; Masked AND colors, window
   394                                  	; (red block starts at row 130)
   395                                  	; ((white text color will be changed to black))
   396 00000348 BF00F80000              	mov	edi, 1111100000000000b ; mask color, RED
   397                                  	;xor	ecx, ecx ; BLACK (and color)
   398 0000034D BA28008200              	mov	edx, 130*65536+40 ; column 40, row 130
   399 00000352 BEA0006E00              	mov	esi, 110*65536+160 ; size: 110*160
   400                                  	;mov	ebx, 0235h ; Masked AND colors in window
   401 00000357 B335                    	mov	bl, 35h
   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 00000359 B81F000000          <1>  mov eax, %1
   402                              <1> 
   402 0000035E CD40                <1>  int 40h
   403                                  
   404 00000360 E814010000              	call	waitforkey
   405                                  
   406                                  	; Masked ADD to yellow block position
   407 00000365 29FF                    	sub	edi, edi ; mask color, BLACK
   408 00000367 B188                    	mov	cl, 88h ; add 88h to current color
   409 00000369 BA00005E01              	mov	edx, 350*65536 ; column 0, row 350
   410 0000036E BE80026E00              	mov	esi, 110*65536+640 ; size: 110*640
   411                                  	;mov	ebx, 0232h ; add color, window, masked
   412 00000373 B332                    	mov	bl, 32h
   413                                  	sys	_video	
   413                              <1> 
   413                              <1> 
   413                              <1> 
   413                              <1> 
   413                              <1>  %if %0 >= 2
   413                              <1>  mov ebx, %2
   413                              <1>  %if %0 >= 3
   413                              <1>  mov ecx, %3
   413                              <1>  %if %0 = 4
   413                              <1>  mov edx, %4
   413                              <1>  %endif
   413                              <1>  %endif
   413                              <1>  %endif
   413 00000375 B81F000000          <1>  mov eax, %1
   413                              <1> 
   413 0000037A CD40                <1>  int 40h
   414                                  
   415 0000037C E8F8000000              	call	waitforkey
   416                                  
   417                                  	; Masked SUB from green block position
   418                                  	;sub	edi, edi ; mask color, BLACK
   419                                  	;mov	ecx, 88h ; sub 88h from current color
   420 00000381 BA0000F000              	mov	edx, 240*65536 ; column 0, row 240
   421                                  	;mov	esi, 110*65536+640 ; size: 110*640
   422                                  	;mov	ebx, 0233h ; sub color, window, masked
   423 00000386 B333                    	mov	bl, 33h
   424                                  	sys	_video	
   424                              <1> 
   424                              <1> 
   424                              <1> 
   424                              <1> 
   424                              <1>  %if %0 >= 2
   424                              <1>  mov ebx, %2
   424                              <1>  %if %0 >= 3
   424                              <1>  mov ecx, %3
   424                              <1>  %if %0 = 4
   424                              <1>  mov edx, %4
   424                              <1>  %endif
   424                              <1>  %endif
   424                              <1>  %endif
   424 00000388 B81F000000          <1>  mov eax, %1
   424                              <1> 
   424 0000038D CD40                <1>  int 40h
   425                                  
   426 0000038F E8E5000000              	call	waitforkey
   427                                  
   428                                  	; Masked SUB from yellow block position
   429                                  	;sub	edi, edi ; mask color, BLACK
   430                                  	;mov	cl, 88h ; add 88h to current color
   431 00000394 BA00005E01              	mov	edx, 350*65536 ; column 0, row 350
   432                                  	;mov	esi, 110*65536+640 ; size: 110*640
   433                                  	;mov	ebx, 0233h ; sub color, window, masked
   434                                  	sys	_video	
   434                              <1> 
   434                              <1> 
   434                              <1> 
   434                              <1> 
   434                              <1>  %if %0 >= 2
   434                              <1>  mov ebx, %2
   434                              <1>  %if %0 >= 3
   434                              <1>  mov ecx, %3
   434                              <1>  %if %0 = 4
   434                              <1>  mov edx, %4
   434                              <1>  %endif
   434                              <1>  %endif
   434                              <1>  %endif
   434 00000399 B81F000000          <1>  mov eax, %1
   434                              <1> 
   434 0000039E CD40                <1>  int 40h
   435                                  
   436 000003A0 E8D4000000              	call	waitforkey
   437                                  
   438                                  	; Masked ADD to green block position
   439                                  	;sub	edi, edi ; mask color, BLACK
   440                                  	;mov	cl, 88h ; sub 88h from current color
   441 000003A5 BA0000F000              	mov	edx, 240*65536 ; column 0, row 240
   442                                  	;mov	esi, 110*65536+640 ; size: 110*640
   443                                  	;mov	ebx, 0232h ; add color, window, masked
   444 000003AA B332                    	mov	bl, 32h
   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 000003AC B81F000000          <1>  mov eax, %1
   445                              <1> 
   445 000003B1 CD40                <1>  int 40h
   446                                  
   447 000003B3 E8C1000000              	call	waitforkey
   448                                  
   449                                  	; Masked OR colors, window
   450                                  	; (white block starts at row 10)
   451 000003B8 66BF1F00                	mov	di, 11111b ; mask color, BLUE
   452 000003BC B980800000              	mov	ecx, 8080h ; OR value (with current color)
   453 000003C1 BA00000A00              	mov	edx, 10*65536+0 ; column 0, row 10
   454 000003C6 BE80027800              	mov	esi, 120*65536+640 ; size: 120*640
   455 000003CB BB34020000              	mov	ebx, 0234h ; Masked OR colors in window
   456                                  	sys	_video
   456                              <1> 
   456                              <1> 
   456                              <1> 
   456                              <1> 
   456                              <1>  %if %0 >= 2
   456                              <1>  mov ebx, %2
   456                              <1>  %if %0 >= 3
   456                              <1>  mov ecx, %3
   456                              <1>  %if %0 = 4
   456                              <1>  mov edx, %4
   456                              <1>  %endif
   456                              <1>  %endif
   456                              <1>  %endif
   456 000003D0 B81F000000          <1>  mov eax, %1
   456                              <1> 
   456 000003D5 CD40                <1>  int 40h
   457                                  
   458 000003D7 E89D000000              	call	waitforkey
   459                                  
   460                                  	; Masked XOR colors, window
   461                                  	; (white block starts at row 465)
   462 000003DC 66BFE0FF                	mov	di, 1111111111100000b ; mask color, YELLOW
   463 000003E0 66B94F4F                	mov	cx, 4F4Fh ; XOR value (with current color)
   464 000003E4 BA00005E01              	mov	edx, 350*65536+0 ; column 0, row 465
   465 000003E9 BE80027800              	mov	esi, 120*65536+640 ; size: 120*640
   466                                  	;mov	ebx, 0236h ; Masked XOR colors in window
   467 000003EE B334                    	mov	bl, 34h
   468                                  	sys	_video
   468                              <1> 
   468                              <1> 
   468                              <1> 
   468                              <1> 
   468                              <1>  %if %0 >= 2
   468                              <1>  mov ebx, %2
   468                              <1>  %if %0 >= 3
   468                              <1>  mov ecx, %3
   468                              <1>  %if %0 = 4
   468                              <1>  mov edx, %4
   468                              <1>  %endif
   468                              <1>  %endif
   468                              <1>  %endif
   468 000003F0 B81F000000          <1>  mov eax, %1
   468                              <1> 
   468 000003F5 CD40                <1>  int 40h
   469                                  
   470 000003F7 E87D000000              	call	waitforkey
   471                                  
   472                                  	; Masked mix color, window
   473                                  	; (blue block starts at row 20)
   474 000003FC 66BF1F00                	mov	di, 11111b ; mask color, BLUE
   475 00000400 66B93030                	mov	cx, 3030h
   476 00000404 BA28001400              	mov	edx, 20*65536+40 ; column 40, row 20
   477 00000409 BEA0006E00              	mov	esi, 110*65536+160 ; size: 110*160
   478                                  	;mov	ebx, 023Bh ; Masked mix colors in window
   479 0000040E B33B                    	mov	bl, 3Bh
   480                                  	sys	_video
   480                              <1> 
   480                              <1> 
   480                              <1> 
   480                              <1> 
   480                              <1>  %if %0 >= 2
   480                              <1>  mov ebx, %2
   480                              <1>  %if %0 >= 3
   480                              <1>  mov ecx, %3
   480                              <1>  %if %0 = 4
   480                              <1>  mov edx, %4
   480                              <1>  %endif
   480                              <1>  %endif
   480                              <1>  %endif
   480 00000410 B81F000000          <1>  mov eax, %1
   480                              <1> 
   480 00000415 CD40                <1>  int 40h
   481                                  
   482 00000417 E85D000000              	call	waitforkey
   483                                  
   484                                  	; Masked mix color, window
   485                                  	; (red block starts at row 130)
   486 0000041C 66BF00F8                	mov	di, 1111100000000000b ; mask color, RED
   487 00000420 66B98E8E                	mov	cx, 8E8Eh
   488 00000424 BA28008200              	mov	edx, 130*65536+40 ; column 40, row 130
   489 00000429 BEA0006E00              	mov	esi, 110*65536+160 ; size: 110*160
   490                                  	;mov	ebx, 023Bh ; Masked mix colors in window
   491                                  	sys	_video
   491                              <1> 
   491                              <1> 
   491                              <1> 
   491                              <1> 
   491                              <1>  %if %0 >= 2
   491                              <1>  mov ebx, %2
   491                              <1>  %if %0 >= 3
   491                              <1>  mov ecx, %3
   491                              <1>  %if %0 = 4
   491                              <1>  mov edx, %4
   491                              <1>  %endif
   491                              <1>  %endif
   491                              <1>  %endif
   491 0000042E B81F000000          <1>  mov eax, %1
   491                              <1> 
   491 00000433 CD40                <1>  int 40h
   492                                  
   493 00000435 E83F000000              	call	waitforkey
   494                                  
   495                                  	; Masked mix color, window
   496                                  	; (green block starts at row 240)
   497 0000043A 66BFE007                	mov	di, 11111100000b ; mask color, GREEN
   498 0000043E 66B97770                	mov	cx, 7077h
   499 00000442 BA2800F000              	mov	edx, 240*65536+40 ; column 40, row 240
   500 00000447 BEB4006E00              	mov	esi, 110*65536+180 ; size: 110*180
   501                                  	;mov	ebx, 023Bh ; Masked mix colors in window
   502                                  	sys	_video
   502                              <1> 
   502                              <1> 
   502                              <1> 
   502                              <1> 
   502                              <1>  %if %0 >= 2
   502                              <1>  mov ebx, %2
   502                              <1>  %if %0 >= 3
   502                              <1>  mov ecx, %3
   502                              <1>  %if %0 = 4
   502                              <1>  mov edx, %4
   502                              <1>  %endif
   502                              <1>  %endif
   502                              <1>  %endif
   502 0000044C B81F000000          <1>  mov eax, %1
   502                              <1> 
   502 00000451 CD40                <1>  int 40h
   503                                  
   504 00000453 E821000000              	call	waitforkey
   505                                  
   506                                  	; copy full screen buffer to screen
   507 00000458 BE[9C050000]            	mov	esi, fullscreen_buffer
   508                                  	;mov	ebx, 0200h
   509 0000045D 30DB                    	xor	bl, bl ; mov bl, 0
   510                                  	sys	_video
   510                              <1> 
   510                              <1> 
   510                              <1> 
   510                              <1> 
   510                              <1>  %if %0 >= 2
   510                              <1>  mov ebx, %2
   510                              <1>  %if %0 >= 3
   510                              <1>  mov ecx, %3
   510                              <1>  %if %0 = 4
   510                              <1>  mov edx, %4
   510                              <1>  %endif
   510                              <1>  %endif
   510                              <1>  %endif
   510 0000045F B81F000000          <1>  mov eax, %1
   510                              <1> 
   510 00000464 CD40                <1>  int 40h
   511                                  	
   512 00000466 E80E000000              	call	waitforkey  
   513                                  		; wait for key stroke before exit
   514                                  terminate:
   515 0000046B E82C000000              	call	set_text_mode
   516                                  	sys	_exit
   516                              <1> 
   516                              <1> 
   516                              <1> 
   516                              <1> 
   516                              <1>  %if %0 >= 2
   516                              <1>  mov ebx, %2
   516                              <1>  %if %0 >= 3
   516                              <1>  mov ecx, %3
   516                              <1>  %if %0 = 4
   516                              <1>  mov edx, %4
   516                              <1>  %endif
   516                              <1>  %endif
   516                              <1>  %endif
   516 00000470 B801000000          <1>  mov eax, %1
   516                              <1> 
   516 00000475 CD40                <1>  int 40h
   517                                  halt:
   518 00000477 EBFE                    	jmp	short halt
   519                                  
   520                                  waitforkey:
   521 00000479 B401                    	mov	ah, 1
   522 0000047B CD32                    	int	32h
   523 0000047D 740B                    	jz	short getkey
   524 0000047F FF05[94050000]          	inc	dword [counter]
   525 00000485 90                      	nop
   526 00000486 90                      	nop
   527 00000487 90                      	nop
   528 00000488 EBEF                    	jmp	short waitforkey
   529                                  getkey:
   530 0000048A 30E4                    	xor	ah, ah
   531 0000048C CD32                    	int	32h
   532                                  
   533 0000048E 663D032E                	cmp	ax, 2E03h
   534 00000492 7405                    	je	short _terminate
   535 00000494 3C1B                    	cmp	al, 1Bh ; ESC key
   536 00000496 7401                    	je	short _terminate
   537 00000498 C3                      	retn
   538                                  _terminate:
   539 00000499 58                      	pop	eax ; return address
   540 0000049A EBCF                    	jmp	short terminate
   541                                  	
   542                                  set_text_mode:
   543 0000049C 30E4                    	xor    ah, ah
   544 0000049E B003                    	mov    al, 3                        
   545                                   	;int   10h ; al = 03h text mode, int 10 video
   546 000004A0 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   547 000004A2 C3                      	retn
   548                                  
   549                                  print_msg:
   550 000004A3 B40E                    	mov	ah, 0Eh
   551 000004A5 BB07000000              	mov	ebx, 7
   552                                  	;mov	bl, 7 ; char attribute & color
   553                                  p_next_chr:
   554 000004AA AC                      	lodsb
   555 000004AB 08C0                    	or	al, al
   556 000004AD 7404                    	jz	short p_retn ; retn	
   557 000004AF CD31                    	int	31h
   558 000004B1 EBF7                    	jmp	short p_next_chr
   559                                  p_retn:
   560 000004B3 C3                      	retn
   561                                  
   562                                  print_text:
   563                                  	; ebp = text address
   564                                  	; esi = row/column position (si = column)
   565                                  p_d_x:
   566                                  	;mov	dh, 0 ; 8x16 system font
   567 000004B4 B606                    	mov	dh, 6 ; 32*64 scaled font (base: 8*16 system font) 
   568                                  p_d_x_n:
   569 000004B6 8A5500                  	mov	dl, [ebp]
   570 000004B9 20D2                    	and	dl, dl
   571 000004BB 7419                    	jz	short p_d_x_ok
   572                                  	sys	_video, 020Fh, [tcolor] 
   572                              <1> 
   572                              <1> 
   572                              <1> 
   572                              <1> 
   572                              <1>  %if %0 >= 2
   572 000004BD BB0F020000          <1>  mov ebx, %2
   572                              <1>  %if %0 >= 3
   572 000004C2 8B0D[98050000]      <1>  mov ecx, %3
   572                              <1>  %if %0 = 4
   572                              <1>  mov edx, %4
   572                              <1>  %endif
   572                              <1>  %endif
   572                              <1>  %endif
   572 000004C8 B81F000000          <1>  mov eax, %1
   572                              <1> 
   572 000004CD CD40                <1>  int 40h
   573 000004CF 45                      	inc	ebp
   574 000004D0 6683C624                	add	si, 36 ; next char pos
   575 000004D4 EBE0                    	jmp	short p_d_x_n
   576                                  p_d_x_ok:
   577 000004D6 C3                      	retn
   578                                  
   579                                  program_msg:
   580 000004D7 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations"
   580 000004E0 2076322E302E33202D-
   580 000004E9 202827737973766964-
   580 000004F2 656F27292054657374-
   580 000004FB 2050726F6772616D20-
   580 00000504 2D20426C6F636B204F-
   580 0000050D 7065726174696F6E73 
   581 00000516 0D0A                    	db 0Dh, 0Ah
   582 00000518 6279204572646F6761-     	db "by Erdogan Tan - 02/03/2021"
   582 00000521 6E2054616E202D2030-
   582 0000052A 322F30332F32303231 
   583                                  	;db 0Dh, 0Ah, 0
   584 00000533 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   585 00000537 507265737320616E79-     	db "Press any key to continue .."
   585 00000540 206B657920746F2063-
   585 00000549 6F6E74696E7565202E-
   585 00000552 2E                 
   586 00000553 0D0A                    	db 0Dh, 0Ah	
   587 00000555 285072657373204553-     	db "(Press ESC to exit) .."
   587 0000055E 4320746F2065786974-
   587 00000567 29202E2E           
   588 0000056B 0D0A                    	db 0Dh, 0Ah
   589 0000056D 0D0A                    	db 0Dh, 0Ah
   590                                  
   591                                  nextline:
   592 0000056F 0D0A00                  	db 0Dh, 0Ah, 0
   593                                  
   594                                  txt_blue:
   595 00000572 424C554500              	db "BLUE", 0
   596                                  txt_red:
   597 00000577 52454400                	db "RED", 0
   598                                  txt_green:
   599 0000057B 475245454E00            	db "GREEN", 0
   600                                  txt_yellow:
   601 00000581 59454C4C4F5700          	db "YELLOW", 0
   602                                  txt_white:
   603 00000588 574849544500            	db "WHITE", 0
   604                                  txt_black:
   605 0000058E 424C41434B00            	db "BLACK", 0
   606                                  	
   607                                  bss:
   608                                  
   609                                  ABSOLUTE bss
   610                                  
   611                                  alignb 4
   612                                  
   613                                  counter:
   614 00000594 <res 00000004>          	resd 1	
   615                                  
   616                                  bss_start:
   617 00000598 <res 00000004>          tcolor: resd 1
   618                                  
   619                                  fullscreen_buffer:
   620 0000059C <res 00096000>          	resb 307200*2
   621                                  bss_end:
